mc-shell 0.7.0__tar.gz → 0.7.1__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 (215) hide show
  1. {mc_shell-0.7.0 → mc_shell-0.7.1}/PKG-INFO +2 -3
  2. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/__init__.py +175 -66
  3. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/constants.py +2 -5
  4. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/index.html +2 -2
  5. mc_shell-0.7.1/mcshell/data/app/mced.3f8a9cca.css +2 -0
  6. mc_shell-0.7.1/mcshell/data/app/mced.3f8a9cca.css.map +1 -0
  7. mc_shell-0.7.0/mcshell/data/app/mced.484d99b8.js → mc_shell-0.7.1/mcshell/data/app/mced.de838669.js +109 -86
  8. mc_shell-0.7.0/mcshell/data/app/mced.484d99b8.js.map → mc_shell-0.7.1/mcshell/data/app/mced.de838669.js.map +1 -1
  9. mc_shell-0.7.1/mcshell/data/app/toolbox.63a7b2d6.xml +482 -0
  10. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/materials/colourables.json +154 -154
  11. mc_shell-0.7.1/mcshell/data/materials/entity_overrides.json +4 -0
  12. mc_shell-0.7.1/mcshell/data/materials/materials.pkl +0 -0
  13. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/materials/pickers.json +184 -0
  14. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/materials/singles.json +2 -171
  15. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/powers/stdlib.json +2669 -1
  16. mc_shell-0.7.1/mcshell/digitalgeometryactions.py +60 -0
  17. mc_shell-0.7.0/mcshell/mceventactions.py → mc_shell-0.7.1/mcshell/eventactions.py +0 -7
  18. mc_shell-0.7.1/mcshell/mcactions.py +115 -0
  19. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcactions_base.py +26 -0
  20. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcblockly.py +140 -123
  21. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcclient.py +46 -26
  22. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcplayer.py +23 -13
  23. mc_shell-0.7.1/mcshell/mcscraper.py +240 -0
  24. mc_shell-0.7.1/mcshell/playeractions.py +75 -0
  25. mc_shell-0.7.1/mcshell/pyncraftcactions.py +136 -0
  26. mc_shell-0.7.1/mcshell/qturtleactions.py +122 -0
  27. mc_shell-0.7.1/mcshell/registry_builder.py +594 -0
  28. mc_shell-0.7.1/mcshell/serveractions.py +183 -0
  29. {mc_shell-0.7.0 → mc_shell-0.7.1}/pyproject.toml +2 -3
  30. mc_shell-0.7.0/mcshell/data/app/mced.55f94dd4.css +0 -2
  31. mc_shell-0.7.0/mcshell/data/app/mced.55f94dd4.css.map +0 -1
  32. mc_shell-0.7.0/mcshell/data/app/toolbox.48fd1f79.xml +0 -758
  33. mc_shell-0.7.0/mcshell/data/materials/entity_overrides.json +0 -4
  34. mc_shell-0.7.0/mcshell/data/materials/materials.pkl +0 -0
  35. mc_shell-0.7.0/mcshell/mcactions.py +0 -454
  36. mc_shell-0.7.0/mcshell/mcscraper.py +0 -238
  37. mc_shell-0.7.0/mcshell/pyncactions.py +0 -262
  38. mc_shell-0.7.0/mcshell/serveractions.py +0 -204
  39. {mc_shell-0.7.0 → mc_shell-0.7.1}/LICENSE +0 -0
  40. {mc_shell-0.7.0 → mc_shell-0.7.1}/README.md +0 -0
  41. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/Matrix3.py +0 -0
  42. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/Vec3.py +0 -0
  43. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/blueprints/control_api.py +0 -0
  44. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/blueprints/ipython_api.py +0 -0
  45. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/blueprints/powers_api.py +0 -0
  46. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/FruitJuice-0.3.0.jar +0 -0
  47. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/FruitJuice-0.4.0.jar +0 -0
  48. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/FruitJuice-0.4.1.jar +0 -0
  49. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/control.a8439284.css +0 -0
  50. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/control.a8439284.css.map +0 -0
  51. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/control.b03e9afc.js +0 -0
  52. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/control.b03e9afc.js.map +0 -0
  53. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/control.html +0 -0
  54. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/mced.a4de160c.js +0 -0
  55. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/mced.a4de160c.js.map +0 -0
  56. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/mced.efd4d8e7.css +0 -0
  57. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/app/mced.efd4d8e7.css.map +0 -0
  58. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/control_layout.json +0 -0
  59. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/datapacks/flat_world/data/minecraft/dimension/overworld.json +0 -0
  60. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/datapacks/flat_world/data/minecraft/worldgen/biome/the_void.json +0 -0
  61. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/datapacks/flat_world/pack.mcmeta +0 -0
  62. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/datapacks/void_world/data/minecraft/dimension/overworld.json +0 -0
  63. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/datapacks/void_world/data/minecraft/functions/init.mcfunction +0 -0
  64. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/datapacks/void_world/data/minecraft/tags/functions/load.json +0 -0
  65. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/datapacks/void_world/data/minecraft/worldgen/biome/the_void.json +0 -0
  66. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/datapacks/void_world/pack.mcmeta +0 -0
  67. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/doc/command_docs.pkl +0 -0
  68. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/entities/entity_id_map.pkl +0 -0
  69. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/entities/generate_entity_blocks.mjs +0 -0
  70. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/entities/pickers.json +0 -0
  71. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/materials/generate_material_blocks.mjs +0 -0
  72. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/materials/mcblocks.csv +0 -0
  73. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/paper-global-template.yaml +0 -0
  74. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/toolbox_template.xml +0 -0
  75. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/%3F.pkl +0 -0
  76. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/Commands.pkl +0 -0
  77. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/EntityType.java.pkl +0 -0
  78. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/Material.html.pkl +0 -0
  79. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/ability.pkl +0 -0
  80. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/advancement.pkl +0 -0
  81. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/alwaysday.pkl +0 -0
  82. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/attribute.pkl +0 -0
  83. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/ban-ip.pkl +0 -0
  84. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/ban.pkl +0 -0
  85. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/banlist.pkl +0 -0
  86. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/bossbar.pkl +0 -0
  87. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/camera.pkl +0 -0
  88. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/camerashake.pkl +0 -0
  89. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/changesetting.pkl +0 -0
  90. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/clear.pkl +0 -0
  91. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/clearspawnpoint.pkl +0 -0
  92. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/clone.pkl +0 -0
  93. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/connect.pkl +0 -0
  94. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/damage.pkl +0 -0
  95. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/data.pkl +0 -0
  96. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/datapack.pkl +0 -0
  97. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/daylock.pkl +0 -0
  98. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/debug.pkl +0 -0
  99. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/dedicatedwsserver.pkl +0 -0
  100. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/defaultgamemode.pkl +0 -0
  101. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/deop.pkl +0 -0
  102. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/dialogue.pkl +0 -0
  103. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/difficulty.pkl +0 -0
  104. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/effect.pkl +0 -0
  105. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/enchant.pkl +0 -0
  106. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/event.pkl +0 -0
  107. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/execute.pkl +0 -0
  108. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/experience.pkl +0 -0
  109. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/fill.pkl +0 -0
  110. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/fillbiome.pkl +0 -0
  111. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/fog.pkl +0 -0
  112. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/forceload.pkl +0 -0
  113. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/function.pkl +0 -0
  114. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/gamemode.pkl +0 -0
  115. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/gamerule.pkl +0 -0
  116. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/gametest.pkl +0 -0
  117. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/give.pkl +0 -0
  118. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/help.pkl +0 -0
  119. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/immutableworld.pkl +0 -0
  120. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/item.pkl +0 -0
  121. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/jfr.pkl +0 -0
  122. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/kick.pkl +0 -0
  123. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/kill.pkl +0 -0
  124. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/list.pkl +0 -0
  125. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/locate.pkl +0 -0
  126. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/loot.pkl +0 -0
  127. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/me.pkl +0 -0
  128. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/mobevent.pkl +0 -0
  129. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/msg.pkl +0 -0
  130. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/music.pkl +0 -0
  131. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/op.pkl +0 -0
  132. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/ops.pkl +0 -0
  133. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/pardon-ip.pkl +0 -0
  134. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/pardon.pkl +0 -0
  135. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/particle.pkl +0 -0
  136. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/perf.pkl +0 -0
  137. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/permission.pkl +0 -0
  138. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/place_(Java_Edition).pkl +0 -0
  139. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/playanimation.pkl +0 -0
  140. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/playsound.pkl +0 -0
  141. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/publish.pkl +0 -0
  142. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/random.pkl +0 -0
  143. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/recipe.pkl +0 -0
  144. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/reload.pkl +0 -0
  145. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/remove.pkl +0 -0
  146. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/replaceitem.pkl +0 -0
  147. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/return.pkl +0 -0
  148. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/ride.pkl +0 -0
  149. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/save-all.pkl +0 -0
  150. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/save-off.pkl +0 -0
  151. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/save-on.pkl +0 -0
  152. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/save.pkl +0 -0
  153. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/say.pkl +0 -0
  154. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/schedule.pkl +0 -0
  155. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/scoreboard.pkl +0 -0
  156. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/script.pkl +0 -0
  157. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/scriptevent.pkl +0 -0
  158. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/seed.pkl +0 -0
  159. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/setblock.pkl +0 -0
  160. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/setidletimeout.pkl +0 -0
  161. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/setmaxplayers.pkl +0 -0
  162. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/setworldspawn.pkl +0 -0
  163. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/spawnpoint.pkl +0 -0
  164. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/spectate.pkl +0 -0
  165. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/spreadplayers.pkl +0 -0
  166. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/stop.pkl +0 -0
  167. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/stopsound.pkl +0 -0
  168. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/structure.pkl +0 -0
  169. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/summon.pkl +0 -0
  170. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/tag.pkl +0 -0
  171. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/team.pkl +0 -0
  172. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/teammsg.pkl +0 -0
  173. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/teleport.pkl +0 -0
  174. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/tell.pkl +0 -0
  175. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/tellraw.pkl +0 -0
  176. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/testfor.pkl +0 -0
  177. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/testforblock.pkl +0 -0
  178. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/testforblocks.pkl +0 -0
  179. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/tickingarea.pkl +0 -0
  180. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/time.pkl +0 -0
  181. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/title.pkl +0 -0
  182. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/titleraw.pkl +0 -0
  183. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/tm.pkl +0 -0
  184. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/toggledownfall.pkl +0 -0
  185. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/tp.pkl +0 -0
  186. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/transferserver.pkl +0 -0
  187. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/trigger.pkl +0 -0
  188. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/volumearea.pkl +0 -0
  189. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/w.pkl +0 -0
  190. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/wb.pkl +0 -0
  191. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/weather.pkl +0 -0
  192. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/whitelist.pkl +0 -0
  193. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/worldborder.pkl +0 -0
  194. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/worldbuilder.pkl +0 -0
  195. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/wsserver.pkl +0 -0
  196. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/data/webpage-cache/xp.pkl +0 -0
  197. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcexperience_base.py +0 -0
  198. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mclsystem.py +0 -0
  199. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcrepo.py +0 -0
  200. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcserver.py +0 -0
  201. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcshell.py +0 -0
  202. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcturtle.py +0 -0
  203. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcvoxel.py +0 -0
  204. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/mcvoxel_original.py +0 -0
  205. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/ppdownloader.py +0 -0
  206. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/ppmanager.py +0 -0
  207. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/__init__.py +0 -0
  208. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/block.py +0 -0
  209. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/connection.py +0 -0
  210. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/entity.py +0 -0
  211. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/event.py +0 -0
  212. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/logger.py +0 -0
  213. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/minecraft.py +0 -0
  214. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/util.py +0 -0
  215. {mc_shell-0.7.0 → mc_shell-0.7.1}/mcshell/vendored/pyncraft/vec3.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mc-shell
3
- Version: 0.7.0
3
+ Version: 0.7.1
4
4
  Summary: An interactive shell and editor for controlling Minecraft servers and creating powers.
5
5
  License-File: LICENSE
6
6
  Author: Jeff
@@ -12,7 +12,6 @@ Classifier: Programming Language :: Python :: 3.11
12
12
  Classifier: Programming Language :: Python :: 3.12
13
13
  Classifier: Programming Language :: Python :: 3.13
14
14
  Classifier: Programming Language :: Python :: 3.14
15
- Requires-Dist: aio-mc-rcon
16
15
  Requires-Dist: beautifulsoup4
17
16
  Requires-Dist: blockapily
18
17
  Requires-Dist: click
@@ -21,13 +20,13 @@ Requires-Dist: flask
21
20
  Requires-Dist: flask-cors
22
21
  Requires-Dist: flask-socketio
23
22
  Requires-Dist: ipython
23
+ Requires-Dist: mctools (>=1.4.1,<2.0.0)
24
24
  Requires-Dist: numpy
25
25
  Requires-Dist: pexpect
26
26
  Requires-Dist: pickleshare
27
27
  Requires-Dist: pytest (>=9.0.2,<10.0.0)
28
28
  Requires-Dist: python-socketio[client]
29
29
  Requires-Dist: pyyaml (>=6.0.2,<7.0.0)
30
- Requires-Dist: rcon
31
30
  Requires-Dist: requests
32
31
  Requires-Dist: rich
33
32
  Requires-Dist: voxelmap (>=5.1.1,<6.0.0)
@@ -52,6 +52,7 @@ class MCShell(Magics):
52
52
 
53
53
  self.active_paper_server: Optional[PaperServerManager ,None ] = None
54
54
 
55
+
55
56
  def _complete_world_command(self, ipyshell, event):
56
57
  ipyshell.user_ns.update(dict(rcon_event=event))
57
58
  text = event.symbol
@@ -494,7 +495,7 @@ class MCShell(Magics):
494
495
  except ConnectionRefusedError as e:
495
496
  print("[red bold]Unable to send command. Is the server running?[/]")
496
497
  pprint(self.server_data)
497
- except (WrongPassword, IncorrectPasswordError) as e:
498
+ except RCONAuthenticationError as e:
498
499
  print("[red bold]The password is wrong. Use %mc_login reset[/]")
499
500
 
500
501
  def _get_client(self):
@@ -506,41 +507,105 @@ class MCShell(Magics):
506
507
  def _help(self, *args):
507
508
  return self._send('help', *args)
508
509
  def _run(self, *args):
509
- return self._send('run',*args)
510
+ return self._send('run',*args)
510
511
  def _data(self, *args):
511
512
  return self._send('data',*args)
512
513
 
514
+ # @property
515
+ # def commands(self):
516
+ # _rcon_commands = {}
517
+ # if not self.rcon_commands:
518
+ # try:
519
+ # _help_text = self._help()
520
+ # except:
521
+ # return _rcon_commands
522
+ #
523
+ # _help_data = list(filter(lambda x: x != '', map(lambda x: x.split(' '), _help_text.split('/'))))[1:]
524
+ # for _help_datum in _help_data:
525
+ # _cmd = _help_datum[0]
526
+ # if 'minecraft:' in _cmd:
527
+ # _cmd = _cmd.split(':')[1]
528
+ # try:
529
+ # _cmd_data = self._help(_cmd)
530
+ # except:
531
+ # return
532
+ # if not _cmd_data:
533
+ # # found a shortcut command like xp -> experience
534
+ # continue
535
+ # _cmd_data = list(map(lambda x:x.split()[1:],_cmd_data.split('/')))
536
+ # _sub_cmd_data = {}
537
+ # for _sub_cmd_datum in _cmd_data[1:]:
538
+ # if not _sub_cmd_datum[0][0] in ('<','[','('):
539
+ # _sub_cmd_data.update({_sub_cmd_datum[0]: _sub_cmd_datum[1:]})
540
+ # else:
541
+ # # TODO what about commands without sub-commands?
542
+ # _sub_cmd_data.update({' ': _sub_cmd_datum})
543
+ # _rcon_commands.update({_cmd.replace('-','_'): _sub_cmd_data})
544
+ # self.rcon_commands = _rcon_commands
545
+ # return self.rcon_commands
546
+
513
547
  @property
514
548
  def commands(self):
515
- _rcon_commands = {}
549
+ """
550
+ Builds a unique, deduplicated command and subcommand registry.
551
+ Deduplicates sub-items like gamerules (e.g., 'spawn_mobs' vs 'minecraft:spawn_mobs').
552
+ """
516
553
  if not self.rcon_commands:
554
+ _rcon_commands = {}
517
555
  try:
518
- _help_text = self._help()
556
+ _help_text = self._help() # Stripped by MCClient
519
557
  except:
520
- return _rcon_commands
558
+ return {}
559
+
560
+ if not _help_text:
561
+ return {}
562
+
563
+ seen_base_cmds = set()
564
+ _help_data = list(filter(None, _help_text.split('/')))
565
+
566
+ for entry in _help_data:
567
+ parts = entry.split()
568
+ if not parts or parts[0] in ('?', 'bukkit:?'):
569
+ continue
570
+
571
+ raw_cmd = parts[0]
572
+ base_cmd = raw_cmd.split(':')[-1]
573
+
574
+ if base_cmd in seen_base_cmds:
575
+ continue
576
+
577
+ seen_base_cmds.add(base_cmd)
578
+ clean_key = raw_cmd.replace('-', '_')
521
579
 
522
- _help_data = list(filter(lambda x: x != '', map(lambda x: x.split(' '), _help_text.split('/'))))[1:]
523
- for _help_datum in _help_data:
524
- _cmd = _help_datum[0]
525
- if 'minecraft:' in _cmd:
526
- _cmd = _cmd.split(':')[1]
527
580
  try:
528
- _cmd_data = self._help(_cmd)
581
+ _cmd_help = self._help(raw_cmd) # Stripped by MCClient
582
+ _help_lines = list(map(lambda x: x.split()[1:], _cmd_help.split('/')))
583
+
584
+ _sub_cmd_data = {}
585
+ seen_sub_items = set() # Track subcommands/gamerules specifically
586
+
587
+ for line_args in _help_lines:
588
+ if not line_args:
589
+ continue
590
+
591
+ arg0 = line_args[0]
592
+ # If it's a literal (not a placeholder like <target>)
593
+ if not arg0.startswith(('<', '[', '(')):
594
+ # Deduplicate sub-item (e.g., minecraft:spawn_mobs -> spawn_mobs)
595
+ clean_sub = arg0.split(':')[-1]
596
+ if clean_sub not in seen_sub_items:
597
+ _sub_cmd_data.update({clean_sub: line_args[1:]})
598
+ seen_sub_items.add(clean_sub)
599
+ else:
600
+ # Catch-all for commands that take direct syntax arguments
601
+ _sub_cmd_data.update({' ': line_args})
602
+
603
+ _rcon_commands.update({clean_key: _sub_cmd_data})
529
604
  except:
530
- return
531
- if not _cmd_data:
532
- # found a shortcut command like xp -> experience
533
605
  continue
534
- _cmd_data = list(map(lambda x:x.split()[1:],_cmd_data.split('/')))
535
- _sub_cmd_data = {}
536
- for _sub_cmd_datum in _cmd_data[1:]:
537
- if not _sub_cmd_datum[0][0] in ('<','[','('):
538
- _sub_cmd_data.update({_sub_cmd_datum[0]: _sub_cmd_datum[1:]})
539
- else:
540
- # TODO what about commands without sub-commands?
541
- _sub_cmd_data.update({' ': _sub_cmd_datum})
542
- _rcon_commands.update({_cmd.replace('-','_'): _sub_cmd_data})
606
+
543
607
  self.rcon_commands = _rcon_commands
608
+
544
609
  return self.rcon_commands
545
610
 
546
611
  @line_magic
@@ -567,56 +632,91 @@ class MCShell(Magics):
567
632
  _mcc = self._get_client()
568
633
  pprint(self.server_data)
569
634
 
570
- @line_magic
571
- def mc_help(self,line):
572
- '''
573
- %mc_help [COMMAND]
574
- '''
575
635
 
636
+ @line_magic
637
+ def mc_help(self, line):
638
+ """
639
+ Sorted, deduplicated help menu.
640
+ Prevents 'minecraft:' clutter and gamerule text-walls.
641
+ """
576
642
  _cmd = []
577
- _doc_line = ''
578
- _doc_url = ''
579
- _doc_code_lines = ''
580
643
  if line:
581
644
  _line_parts = line.split()
582
- if 'minecraft:' in _line_parts[0]:
583
- _line_parts[0] = _line_parts[0].split(':')[1]
584
- _doc_line,_doc_url,_doc_code_lines = self.mc_cmd_docs.get(_line_parts[0],('','',''))
585
- _line_parts[0] = _line_parts[0].replace('_', '-')
586
- _cmd += [' '.join(_line_parts)]
645
+ # Lookup docs by clean name (e.g., 'enchant' even if user types 'minecraft:enchant')
646
+ clean_name = _line_parts[0].split(':')[-1]
647
+ _doc_data = self.mc_cmd_docs.get(clean_name, (None, None, None))
587
648
 
588
- if _doc_line and _doc_url:
589
- print(_doc_line)
590
- print(_doc_url)
591
- print()
649
+ if _doc_data[0]:
650
+ print(f"{_doc_data[0]}\n{_doc_data[1]}\n")
592
651
 
593
- if _doc_code_lines:
594
- for _doc_code_line in _doc_code_lines:
595
- print(_doc_code_line)
596
- else:
597
- _help_text = self._help(*_cmd)
598
- if not _help_text:
599
- print("No help available!")
652
+ if _doc_data[2]:
653
+ for d_line in _doc_data[2]: print(d_line)
600
654
  return
601
- for _help_line in _help_text.split('/')[1:]:
602
- _help_parts = _help_line.split()
603
- _help_parts[0] = _help_parts[0].replace('-','_')
604
- print(f'{" ".join(_help_parts)}')
655
+
656
+ _cmd += [' '.join(_line_parts)]
657
+
658
+ _raw_help = self._help(*_cmd)
659
+ if not _raw_help:
660
+ print("No help available!")
661
+ return
662
+
663
+ _help_text = _raw_help
664
+
665
+ seen_base = set()
666
+ output = []
667
+
668
+ for entry in filter(None, _help_text.split('/')):
669
+ parts = entry.split()
670
+ if not parts or parts[0] in ('?', 'bukkit:?'): continue
671
+
672
+ raw_cmd = parts[0]
673
+ base_name = raw_cmd.split(':')[-1]
674
+
675
+ if base_name in seen_base: continue
676
+ seen_base.add(base_name)
677
+
678
+ # Truncate the massive gamerule ruleset for the general list
679
+ if base_name == "gamerule" and len(entry) > 200:
680
+ entry = f"{raw_cmd} <rule> [<value>]"
681
+
682
+ output.append(entry.replace('-', '_'))
683
+
684
+ # Sort alphabetically for easy scanning
685
+ for line in sorted(output):
686
+ print(line)
605
687
 
606
688
  def _complete_mc_help(self, ipyshell, event):
607
- ipyshell.user_ns.update(dict(rcon_event=event))
608
- text = event.symbol
689
+ """
690
+ Provides deep, deduplicated completion for %mc_help.
691
+ Supports: %mc_help gamerule <TAB> -> clean list of rules.
692
+ """
693
+ text_to_complete = event.symbol
609
694
  parts = event.line.split()
610
- ipyshell.user_ns.update(dict(rcon_event=event))
611
695
 
612
- arg_matches= []
613
- if len(parts) == 1: # showing commands
614
- arg_matches = [c for c in self.commands.keys()]
615
- ipyshell.user_ns.update({'rcon_matches':arg_matches})
616
- elif len(parts) == 2 and text != '': # completing commands
617
- arg_matches = [c for c in self.commands.keys() if c.startswith(text)]
618
- ipyshell.user_ns.update({'rcon_matches':arg_matches})
696
+ # Extract and normalize the command name
697
+ command = None
698
+ if len(parts) >= 2:
699
+ command = parts[1].replace('-', '_')
700
+ if ':' in command:
701
+ command = command.split(':')[-1]
702
+
703
+ arg_matches = []
704
+
705
+ # Case 1: Completing the base command
706
+ if len(parts) == 1 or (len(parts) == 2 and text_to_complete != ''):
707
+ arg_matches = [c for c in self.commands.keys() if c.startswith(text_to_complete)]
708
+
709
+ # Case 2: Showing/Completing sub-items (like gamerules)
710
+ elif len(parts) >= 2 and command in self.commands:
711
+ sub_map = self.commands[command]
712
+ sub_keys = [k for k in sub_map.keys() if k != ' ']
619
713
 
714
+ if len(parts) == 2 and text_to_complete == '':
715
+ arg_matches = sub_keys
716
+ elif len(parts) == 3 and text_to_complete != '':
717
+ arg_matches = [k for k in sub_keys if k.startswith(text_to_complete)]
718
+
719
+ ipyshell.user_ns.update({'rcon_matches': arg_matches})
620
720
  return arg_matches
621
721
 
622
722
  @line_magic
@@ -641,8 +741,14 @@ class MCShell(Magics):
641
741
  print('-' * 100)
642
742
  if _arg_list[0] == 'help':
643
743
  _responses = response.split('/')
644
- for _response in _responses:
645
- print('\t' + _response)
744
+ for _resp in _responses:
745
+ if _resp.strip():
746
+ # Keep namespaces, just fix hyphens
747
+ _parts = _resp.split()
748
+ _parts[0] = _parts[0].replace('-', '_')
749
+ print('\t' + ' '.join(_parts))
750
+ # for _response in _responses:
751
+ # print('\t' + _response)
646
752
  elif response.split()[0] == 'Unknown':
647
753
  print("[red]Error in usage:[/]")
648
754
  self.mc_help(line)
@@ -849,10 +955,13 @@ class MCShell(Magics):
849
955
  print("Currently running powers:", list(RUNNING_POWERS.keys()))
850
956
  return
851
957
 
852
- power_to_cancel = RUNNING_POWERS.get(execution_id)
853
- if power_to_cancel and execution_id in RUNNING_POWERS:
958
+ # Lookup the execution metadata in the global registry
959
+ power_metadata = RUNNING_POWERS.get(execution_id)
960
+
961
+ if power_metadata:
854
962
  print(f"Sending cancellation signal to power: {execution_id}")
855
- power_to_cancel['cancel_event'].set()
963
+ # Corrected Key: Simply 'cancel_event'
964
+ power_metadata['cancel_event'].set()
856
965
  else:
857
966
  print(f"Error: No running power found with ID: {execution_id}")
858
967
 
@@ -1,9 +1,6 @@
1
1
  import eventlet
2
- from rcon.source import Client
3
- from aiomcrcon import Client as AioClient
4
-
5
- from rcon.errorhandler import WrongPassword
6
- from aiomcrcon.errors import IncorrectPasswordError
2
+ from mctools import RCONClient, AsyncRCONClient
3
+ from mctools.errors import RCONAuthenticationError
7
4
 
8
5
  import os
9
6
  import re
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html lang=en><script type=importmap>{"imports":{"2N3MJ":"/toolbox.48fd1f79.xml"}}</script><script type=module src=/mced.a4de160c.js></script><link rel=stylesheet href=/mced.efd4d8e7.css><meta charset=utf-8><title>MC-ED Editor</title><link rel=stylesheet href=/mced.55f94dd4.css><body x-data="{ isLibraryCollapsed: true, isCodeCollapsed: true, keyboardVisible: false }">
1
+ <!DOCTYPE html><html lang=en><script type=importmap>{"imports":{"2N3MJ":"/toolbox.63a7b2d6.xml"}}</script><script type=module src=/mced.a4de160c.js></script><link rel=stylesheet href=/mced.efd4d8e7.css><meta charset=utf-8><title>MC-ED Editor</title><link rel=stylesheet href=/mced.3f8a9cca.css><body x-data="{ isLibraryCollapsed: true, isCodeCollapsed: true, keyboardVisible: false }">
2
2
 
3
3
  <div class="code-collapsed editor-layout library-collapsed" :class="{ 'library-collapsed': isLibraryCollapsed, 'code-collapsed': isCodeCollapsed }">
4
4
  <aside id=power-library-panel>
@@ -128,7 +128,7 @@
128
128
 
129
129
  </div>
130
130
 
131
- <script type=module src=/mced.484d99b8.js></script>
131
+ <script type=module src=/mced.de838669.js></script>
132
132
  <div class=simple-keyboard x-show=keyboardVisible style=z-index:20000;background:#fff;width:100%;position:fixed;bottom:0;left:0>
133
133
  </div>
134
134
 
@@ -0,0 +1,2 @@
1
+ html,body{color:#333;background-color:#f0f0f0;height:100vh;margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;overflow:hidden}[x-cloak]{display:none!important}.editor-layout{box-sizing:border-box;gap:8px;width:100vw;height:100vh;padding:8px;display:flex;overflow:hidden}#power-library-panel,#code-preview-panel{background-color:#fff;border-radius:8px;flex-direction:column;transition:width .3s,padding .3s,opacity .3s;display:flex;overflow:hidden;box-shadow:0 2px 4px #0000001a}#power-library-panel{width:300px}#code-preview-panel{width:35%;min-width:300px}#main-content-panel{flex-direction:column;flex:1;gap:8px;min-width:0;display:flex}.library-collapsed #power-library-panel{opacity:0;pointer-events:none;width:0;padding:0}.code-collapsed #code-preview-panel{opacity:0;pointer-events:none;width:0;min-width:0;padding:0}.panel-header{border-bottom:1px solid #e0e0e0;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}.panel-header h2{margin:0;font-size:16px}#power-list{flex-grow:1;padding:8px;overflow-y:auto}#blocklyDiv{border:1px solid #ddd;border-radius:8px;flex-grow:1;overflow:hidden;position:relative!important}#controls{background:#fff;border-radius:8px;flex-wrap:wrap;flex-shrink:0;gap:8px;padding:8px;display:flex;box-shadow:0 2px 4px #0000001a}#controls button,.modal-buttons button{cursor:pointer;background-color:#f7f7f7;border:1px solid #ccc;border-radius:4px;padding:6px 12px;transition:background .2s}#controls button:hover{background-color:#e9e9e9}.btn-danger{color:#fff!important;background-color:#dc3545!important;border-color:#bd2130!important}.toggle-btn{cursor:pointer;background:0 0;border:none;border-radius:4px;padding:4px 8px;font-size:16px}.toggle-btn:hover{background-color:#eee}#code-container{color:#f8f8f2;box-sizing:border-box;white-space:pre-wrap;word-break:break-all;background-color:#272822;flex-grow:1;margin:0;padding:1em;font-family:Fira Code,monospace;font-size:14px;line-height:1.5;overflow:auto}.modal-overlay{z-index:40000;background-color:#0009;width:100%;height:100%;position:fixed;top:0;left:0}.modal-content{z-index:40001;background-color:#fff;border-radius:12px;width:90%;max-width:500px;padding:25px;position:fixed;top:30%;left:50%;transform:translate(-50%,-30%);box-shadow:0 5px 15px #0000004d}.modal-content input,.modal-content textarea{box-sizing:border-box;border:1px solid #ccc;border-radius:4px;width:100%;margin:10px 0;padding:10px}.modal-buttons{justify-content:flex-end;gap:10px;margin-top:15px;display:flex}.simple-keyboard{background-color:#fff;width:100%;position:fixed;bottom:0;left:0;box-shadow:0 -5px 20px #0000004d;z-index:50000!important}.hg-button{height:50px!important;font-size:18px!important}.simple-keyboard.hg-layout-numpad{max-width:300px;margin:0 auto}
2
+ /*# sourceMappingURL=mced.3f8a9cca.css.map */
@@ -0,0 +1 @@
1
+ {"mappings":"ACGA,4KASA,iCAOA,+GAWA,gNAYA,iCAIA,8CAMA,kFAWA,wFAOA,gGAWA,4IASA,yCAKA,oDAMA,4GAWA,yIAWA,kKASA,gDAIA,mGAMA,uGASA,wCAOA,qOAkBA,uGAUA,4MAcA,iJAUA,8EAUA,0IAUA,0DAKA","sources":["mced.3f8a9cca.css","src/editor.css"],"sourcesContent":["html, body {\n color: #333;\n background-color: #f0f0f0;\n height: 100vh;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif;\n overflow: hidden;\n}\n\n[x-cloak] {\n display: none !important;\n}\n\n.editor-layout {\n box-sizing: border-box;\n gap: 8px;\n width: 100vw;\n height: 100vh;\n padding: 8px;\n display: flex;\n overflow: hidden;\n}\n\n#power-library-panel, #code-preview-panel {\n background-color: #fff;\n border-radius: 8px;\n flex-direction: column;\n transition: width .3s, padding .3s, opacity .3s;\n display: flex;\n overflow: hidden;\n box-shadow: 0 2px 4px #0000001a;\n}\n\n#power-library-panel {\n width: 300px;\n}\n\n#code-preview-panel {\n width: 35%;\n min-width: 300px;\n}\n\n#main-content-panel {\n flex-direction: column;\n flex: 1;\n gap: 8px;\n min-width: 0;\n display: flex;\n}\n\n.library-collapsed #power-library-panel {\n opacity: 0;\n pointer-events: none;\n width: 0;\n padding: 0;\n}\n\n.code-collapsed #code-preview-panel {\n opacity: 0;\n pointer-events: none;\n width: 0;\n min-width: 0;\n padding: 0;\n}\n\n.panel-header {\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n display: flex;\n}\n\n.panel-header h2 {\n margin: 0;\n font-size: 16px;\n}\n\n#power-list {\n flex-grow: 1;\n padding: 8px;\n overflow-y: auto;\n}\n\n#blocklyDiv {\n border: 1px solid #ddd;\n border-radius: 8px;\n flex-grow: 1;\n overflow: hidden;\n position: relative !important;\n}\n\n#controls {\n background: #fff;\n border-radius: 8px;\n flex-wrap: wrap;\n flex-shrink: 0;\n gap: 8px;\n padding: 8px;\n display: flex;\n box-shadow: 0 2px 4px #0000001a;\n}\n\n#controls button, .modal-buttons button {\n cursor: pointer;\n background-color: #f7f7f7;\n border: 1px solid #ccc;\n border-radius: 4px;\n padding: 6px 12px;\n transition: background .2s;\n}\n\n#controls button:hover {\n background-color: #e9e9e9;\n}\n\n.btn-danger {\n color: #fff !important;\n background-color: #dc3545 !important;\n border-color: #bd2130 !important;\n}\n\n.toggle-btn {\n cursor: pointer;\n background: none;\n border: none;\n border-radius: 4px;\n padding: 4px 8px;\n font-size: 16px;\n}\n\n.toggle-btn:hover {\n background-color: #eee;\n}\n\n#code-container {\n color: #f8f8f2;\n box-sizing: border-box;\n white-space: pre-wrap;\n word-break: break-all;\n background-color: #272822;\n flex-grow: 1;\n margin: 0;\n padding: 1em;\n font-family: Fira Code, monospace;\n font-size: 14px;\n line-height: 1.5;\n overflow: auto;\n}\n\n.modal-overlay {\n z-index: 40000;\n background-color: #0009;\n width: 100%;\n height: 100%;\n position: fixed;\n top: 0;\n left: 0;\n}\n\n.modal-content {\n z-index: 40001;\n background-color: #fff;\n border-radius: 12px;\n width: 90%;\n max-width: 500px;\n padding: 25px;\n position: fixed;\n top: 30%;\n left: 50%;\n transform: translate(-50%, -30%);\n box-shadow: 0 5px 15px #0000004d;\n}\n\n.modal-content input, .modal-content textarea {\n box-sizing: border-box;\n border: 1px solid #ccc;\n border-radius: 4px;\n width: 100%;\n margin: 10px 0;\n padding: 10px;\n}\n\n.modal-buttons {\n justify-content: flex-end;\n gap: 10px;\n margin-top: 15px;\n display: flex;\n}\n\n.simple-keyboard {\n background-color: #fff;\n width: 100%;\n position: fixed;\n bottom: 0;\n left: 0;\n box-shadow: 0 -5px 20px #0000004d;\n z-index: 50000 !important;\n}\n\n.hg-button {\n height: 50px !important;\n font-size: 18px !important;\n}\n\n.simple-keyboard.hg-layout-numpad {\n max-width: 300px;\n margin: 0 auto;\n}\n/*# sourceMappingURL=mced.3f8a9cca.css.map */\n","/* ==========================================================================\n 1. GLOBAL STYLES & RESET\n ========================================================================== */\nhtml, body {\n height: 100vh;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n background-color: #f0f0f0;\n color: #333;\n overflow: hidden; /* Prevent body scroll; panels handle their own overflow */\n}\n\n[x-cloak] {\n display: none !important;\n}\n\n/* ==========================================================================\n 2. MAIN LAYOUT (Flexbox-based for smooth sidebar transitions)\n ========================================================================== */\n.editor-layout {\n display: flex;\n width: 100vw;\n height: 100vh;\n padding: 8px;\n gap: 8px;\n box-sizing: border-box;\n overflow: hidden;\n}\n\n/* Base Panel Styles */\n#power-library-panel,\n#code-preview-panel {\n background-color: #ffffff;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n display: flex;\n flex-direction: column;\n transition: width 0.3s ease, padding 0.3s ease, opacity 0.3s ease;\n overflow: hidden; /* Critical for hiding content during collapse */\n}\n\n/* Sidebar Widths */\n#power-library-panel {\n width: 300px;\n}\n\n#code-preview-panel {\n width: 35%; /* Replaced 100ch to prevent workspace crushing */\n min-width: 300px;\n}\n\n/* Central Workspace - Grows to fill remaining space */\n#main-content-panel {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n}\n\n/* ==========================================================================\n 3. COLLAPSED STATES\n ========================================================================== */\n.library-collapsed #power-library-panel {\n width: 0;\n padding: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n.code-collapsed #code-preview-panel {\n width: 0;\n min-width: 0;\n padding: 0;\n opacity: 0;\n pointer-events: none;\n}\n\n/* ==========================================================================\n 4. PANEL COMPONENTS (Headers, Lists, Containers)\n ========================================================================== */\n.panel-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n border-bottom: 1px solid #e0e0e0;\n flex-shrink: 0;\n}\n\n.panel-header h2 {\n margin: 0;\n font-size: 16px;\n}\n\n#power-list {\n padding: 8px;\n flex-grow: 1;\n overflow-y: auto;\n}\n\n#blocklyDiv {\n flex-grow: 1;\n position: relative !important;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid #ddd;\n}\n\n/* ==========================================================================\n 5. UI CONTROLS & BUTTONS\n ========================================================================== */\n#controls {\n flex-shrink: 0;\n background: #ffffff;\n padding: 8px;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n#controls button, .modal-buttons button {\n padding: 6px 12px;\n border: 1px solid #ccc;\n background-color: #f7f7f7;\n border-radius: 4px;\n cursor: pointer;\n transition: background 0.2s;\n}\n\n#controls button:hover {\n background-color: #e9e9e9;\n}\n\n.btn-danger {\n background-color: #dc3545 !important;\n color: white !important;\n border-color: #bd2130 !important;\n}\n\n.toggle-btn {\n background: none;\n border: none;\n cursor: pointer;\n font-size: 16px;\n padding: 4px 8px;\n border-radius: 4px;\n}\n\n.toggle-btn:hover {\n background-color: #eee;\n}\n\n/* ==========================================================================\n 6. PYTHON CODE DISPLAY (Prism Integration)\n ========================================================================== */\n#code-container {\n flex-grow: 1;\n margin: 0;\n overflow: auto;\n background-color: #272822;\n color: #f8f8f2;\n font-family: 'Fira Code', monospace;\n font-size: 14px;\n line-height: 1.5;\n padding: 1em;\n box-sizing: border-box;\n white-space: pre-wrap;\n word-break: break-all;\n}\n\n/* ==========================================================================\n 7. MODALS & OVERLAYS\n ========================================================================== */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.6);\n z-index: 40000;\n}\n\n.modal-content {\n position: fixed;\n left: 50%;\n top: 30%; /* Higher placement to avoid touchscreen keyboard */\n transform: translate(-50%, -30%);\n background-color: white;\n padding: 25px;\n border-radius: 12px;\n box-shadow: 0 5px 15px rgba(0,0,0,0.3);\n width: 90%;\n max-width: 500px;\n z-index: 40001;\n}\n\n.modal-content input,\n.modal-content textarea {\n width: 100%;\n margin: 10px 0;\n padding: 10px;\n box-sizing: border-box;\n border: 1px solid #ccc;\n border-radius: 4px;\n}\n\n.modal-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n margin-top: 15px;\n}\n\n/* ==========================================================================\n 8. ON-SCREEN KEYBOARD (simple-keyboard)\n ========================================================================== */\n.simple-keyboard {\n z-index: 50000 !important;\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n background-color: white;\n box-shadow: 0 -5px 20px rgba(0,0,0,0.3);\n}\n\n.hg-button {\n height: 50px !important;\n font-size: 18px !important;\n}\n\n.simple-keyboard.hg-layout-numpad {\n max-width: 300px;\n margin: 0 auto;\n}"],"names":[],"version":3,"file":"mced.3f8a9cca.css.map"}