mc-shell 0.6.6__tar.gz → 0.6.8__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 (210) hide show
  1. {mc_shell-0.6.6 → mc_shell-0.6.8}/PKG-INFO +1 -1
  2. mc_shell-0.6.8/mcshell/Matrix3.py +86 -0
  3. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/__init__.py +52 -14
  4. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/constants.py +10 -0
  5. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/app/index.html +38 -5
  6. mc_shell-0.6.8/mcshell/data/app/mced.55f94dd4.css +2 -0
  7. mc_shell-0.6.8/mcshell/data/app/mced.55f94dd4.css.map +1 -0
  8. mc_shell-0.6.6/mcshell/data/app/mced.0c019c78.js → mc_shell-0.6.8/mcshell/data/app/mced.aa2df54f.js +90 -89
  9. mc_shell-0.6.8/mcshell/data/app/mced.aa2df54f.js.map +1 -0
  10. mc_shell-0.6.8/mcshell/data/app/mced.efd4d8e7.css +13 -0
  11. mc_shell-0.6.8/mcshell/data/app/mced.efd4d8e7.css.map +1 -0
  12. mc_shell-0.6.6/mcshell/data/app/toolbox.f17a15a5.xml → mc_shell-0.6.8/mcshell/data/app/toolbox.57f1313e.xml +20 -13
  13. mc_shell-0.6.8/mcshell/data/datapacks/flat_world/data/minecraft/dimension/overworld.json +17 -0
  14. mc_shell-0.6.8/mcshell/data/datapacks/flat_world/data/minecraft/worldgen/biome/the_void.json +28 -0
  15. mc_shell-0.6.8/mcshell/data/datapacks/flat_world/pack.mcmeta +6 -0
  16. mc_shell-0.6.8/mcshell/data/datapacks/void_world/data/minecraft/dimension/overworld.json +17 -0
  17. mc_shell-0.6.8/mcshell/data/datapacks/void_world/data/minecraft/functions/init.mcfunction +4 -0
  18. mc_shell-0.6.8/mcshell/data/datapacks/void_world/data/minecraft/tags/functions/load.json +5 -0
  19. mc_shell-0.6.8/mcshell/data/datapacks/void_world/data/minecraft/worldgen/biome/the_void.json +28 -0
  20. mc_shell-0.6.8/mcshell/data/datapacks/void_world/pack.mcmeta +6 -0
  21. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/materials/colourables.json +137 -137
  22. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/materials/pickers.json +156 -156
  23. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcactions.py +155 -47
  24. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcactions_base.py +50 -9
  25. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcblockly.py +12 -3
  26. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcplayer.py +122 -14
  27. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcserver.py +8 -7
  28. mc_shell-0.6.8/mcshell/mcturtle.py +443 -0
  29. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcvoxel_original.py +1 -1
  30. mc_shell-0.6.8/mcshell/ppdownloader.py +170 -0
  31. mc_shell-0.6.8/mcshell/ppmanager.py +202 -0
  32. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/pyncactions.py +11 -6
  33. mc_shell-0.6.8/mcshell/vendored/pyncraft/__init__.py +0 -0
  34. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/minecraft.py +6 -8
  35. {mc_shell-0.6.6 → mc_shell-0.6.8}/pyproject.toml +1 -1
  36. mc_shell-0.6.6/mcshell/Matrix3.py +0 -87
  37. mc_shell-0.6.6/mcshell/data/app/mced.0c019c78.js.map +0 -1
  38. mc_shell-0.6.6/mcshell/data/app/mced.9b908af4.css +0 -2
  39. mc_shell-0.6.6/mcshell/data/app/mced.9b908af4.css.map +0 -1
  40. mc_shell-0.6.6/mcshell/data/app/mced.b6ed8b22.css +0 -2
  41. mc_shell-0.6.6/mcshell/data/app/mced.b6ed8b22.css.map +0 -1
  42. mc_shell-0.6.6/mcshell/mcturtle.py +0 -422
  43. mc_shell-0.6.6/mcshell/ppdownloader.py +0 -179
  44. mc_shell-0.6.6/mcshell/ppmanager.py +0 -288
  45. {mc_shell-0.6.6 → mc_shell-0.6.8}/LICENSE +0 -0
  46. {mc_shell-0.6.6 → mc_shell-0.6.8}/README.md +0 -0
  47. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/Vec3.py +0 -0
  48. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/blueprints/control_api.py +0 -0
  49. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/blueprints/ipython_api.py +0 -0
  50. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/blueprints/powers_api.py +0 -0
  51. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/FruitJuice-0.3.0.jar +0 -0
  52. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/FruitJuice-0.4.0.jar +0 -0
  53. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/FruitJuice-0.4.1.jar +0 -0
  54. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/app/control.a8439284.css +0 -0
  55. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/app/control.a8439284.css.map +0 -0
  56. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/app/control.b03e9afc.js +0 -0
  57. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/app/control.b03e9afc.js.map +0 -0
  58. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/app/control.html +0 -0
  59. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/app/mced.a4de160c.js +0 -0
  60. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/app/mced.a4de160c.js.map +0 -0
  61. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/control_layout.json +0 -0
  62. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/doc/command_docs.pkl +0 -0
  63. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/entities/entity_id_map.pkl +0 -0
  64. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/entities/generate_entity_blocks.mjs +0 -0
  65. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/entities/pickers.json +0 -0
  66. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/materials/generate_material_blocks.mjs +0 -0
  67. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/materials/materials.pkl +0 -0
  68. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/materials/mcblocks.csv +0 -0
  69. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/materials/singles.json +0 -0
  70. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/paper-global-template.yaml +0 -0
  71. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/powers/stdlib.json +0 -0
  72. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/toolbox_template.xml +0 -0
  73. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/%3F.pkl +0 -0
  74. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/Commands.pkl +0 -0
  75. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/EntityType.java.pkl +0 -0
  76. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/Material.html.pkl +0 -0
  77. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ability.pkl +0 -0
  78. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/advancement.pkl +0 -0
  79. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/alwaysday.pkl +0 -0
  80. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/attribute.pkl +0 -0
  81. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ban-ip.pkl +0 -0
  82. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ban.pkl +0 -0
  83. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/banlist.pkl +0 -0
  84. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/bossbar.pkl +0 -0
  85. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/camera.pkl +0 -0
  86. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/camerashake.pkl +0 -0
  87. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/changesetting.pkl +0 -0
  88. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/clear.pkl +0 -0
  89. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/clearspawnpoint.pkl +0 -0
  90. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/clone.pkl +0 -0
  91. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/connect.pkl +0 -0
  92. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/damage.pkl +0 -0
  93. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/data.pkl +0 -0
  94. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/datapack.pkl +0 -0
  95. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/daylock.pkl +0 -0
  96. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/debug.pkl +0 -0
  97. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/dedicatedwsserver.pkl +0 -0
  98. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/defaultgamemode.pkl +0 -0
  99. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/deop.pkl +0 -0
  100. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/dialogue.pkl +0 -0
  101. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/difficulty.pkl +0 -0
  102. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/effect.pkl +0 -0
  103. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/enchant.pkl +0 -0
  104. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/event.pkl +0 -0
  105. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/execute.pkl +0 -0
  106. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/experience.pkl +0 -0
  107. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/fill.pkl +0 -0
  108. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/fillbiome.pkl +0 -0
  109. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/fog.pkl +0 -0
  110. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/forceload.pkl +0 -0
  111. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/function.pkl +0 -0
  112. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/gamemode.pkl +0 -0
  113. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/gamerule.pkl +0 -0
  114. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/gametest.pkl +0 -0
  115. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/give.pkl +0 -0
  116. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/help.pkl +0 -0
  117. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/immutableworld.pkl +0 -0
  118. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/item.pkl +0 -0
  119. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/jfr.pkl +0 -0
  120. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/kick.pkl +0 -0
  121. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/kill.pkl +0 -0
  122. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/list.pkl +0 -0
  123. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/locate.pkl +0 -0
  124. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/loot.pkl +0 -0
  125. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/me.pkl +0 -0
  126. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/mobevent.pkl +0 -0
  127. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/msg.pkl +0 -0
  128. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/music.pkl +0 -0
  129. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/op.pkl +0 -0
  130. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ops.pkl +0 -0
  131. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/pardon-ip.pkl +0 -0
  132. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/pardon.pkl +0 -0
  133. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/particle.pkl +0 -0
  134. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/perf.pkl +0 -0
  135. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/permission.pkl +0 -0
  136. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/place_(Java_Edition).pkl +0 -0
  137. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/playanimation.pkl +0 -0
  138. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/playsound.pkl +0 -0
  139. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/publish.pkl +0 -0
  140. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/random.pkl +0 -0
  141. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/recipe.pkl +0 -0
  142. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/reload.pkl +0 -0
  143. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/remove.pkl +0 -0
  144. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/replaceitem.pkl +0 -0
  145. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/return.pkl +0 -0
  146. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ride.pkl +0 -0
  147. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/save-all.pkl +0 -0
  148. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/save-off.pkl +0 -0
  149. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/save-on.pkl +0 -0
  150. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/save.pkl +0 -0
  151. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/say.pkl +0 -0
  152. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/schedule.pkl +0 -0
  153. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/scoreboard.pkl +0 -0
  154. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/script.pkl +0 -0
  155. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/scriptevent.pkl +0 -0
  156. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/seed.pkl +0 -0
  157. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/setblock.pkl +0 -0
  158. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/setidletimeout.pkl +0 -0
  159. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/setmaxplayers.pkl +0 -0
  160. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/setworldspawn.pkl +0 -0
  161. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/spawnpoint.pkl +0 -0
  162. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/spectate.pkl +0 -0
  163. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/spreadplayers.pkl +0 -0
  164. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/stop.pkl +0 -0
  165. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/stopsound.pkl +0 -0
  166. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/structure.pkl +0 -0
  167. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/summon.pkl +0 -0
  168. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tag.pkl +0 -0
  169. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/team.pkl +0 -0
  170. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/teammsg.pkl +0 -0
  171. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/teleport.pkl +0 -0
  172. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tell.pkl +0 -0
  173. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tellraw.pkl +0 -0
  174. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/testfor.pkl +0 -0
  175. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/testforblock.pkl +0 -0
  176. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/testforblocks.pkl +0 -0
  177. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tickingarea.pkl +0 -0
  178. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/time.pkl +0 -0
  179. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/title.pkl +0 -0
  180. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/titleraw.pkl +0 -0
  181. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tm.pkl +0 -0
  182. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/toggledownfall.pkl +0 -0
  183. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tp.pkl +0 -0
  184. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/transferserver.pkl +0 -0
  185. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/trigger.pkl +0 -0
  186. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/volumearea.pkl +0 -0
  187. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/w.pkl +0 -0
  188. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/wb.pkl +0 -0
  189. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/weather.pkl +0 -0
  190. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/whitelist.pkl +0 -0
  191. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/worldborder.pkl +0 -0
  192. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/worldbuilder.pkl +0 -0
  193. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/wsserver.pkl +0 -0
  194. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/data/webpage-cache/xp.pkl +0 -0
  195. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcclient.py +0 -0
  196. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mceventactions.py +0 -0
  197. /mc_shell-0.6.6/mcshell/vendored/pyncraft/__init__.py → /mc_shell-0.6.8/mcshell/mcexperience_base.py +0 -0
  198. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mclsystem.py +0 -0
  199. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcrepo.py +0 -0
  200. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcscraper.py +0 -0
  201. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcshell.py +0 -0
  202. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/mcvoxel.py +0 -0
  203. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/serveractions.py +0 -0
  204. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/block.py +0 -0
  205. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/connection.py +0 -0
  206. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/entity.py +0 -0
  207. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/event.py +0 -0
  208. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/logger.py +0 -0
  209. {mc_shell-0.6.6 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/util.py +0 -0
  210. {mc_shell-0.6.6 → mc_shell-0.6.8}/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.6.6
3
+ Version: 0.6.8
4
4
  Summary: An interactive shell and editor for controlling Minecraft servers and creating powers.
5
5
  License-File: LICENSE
6
6
  Author: Jeff
@@ -0,0 +1,86 @@
1
+ import numpy as np
2
+ import math
3
+ from mcshell.Vec3 import Vec3
4
+
5
+ class Matrix3:
6
+ def __init__(self, elements=None):
7
+ """
8
+ Initializes a 3x3 matrix for 3D transformations.
9
+ """
10
+ if elements is not None:
11
+ self.matrix = np.array(elements, dtype=np.float64)
12
+ if self.matrix.shape != (3, 3):
13
+ raise ValueError("Matrix3 elements must be a 3x3 array.")
14
+ else:
15
+ self.matrix = np.identity(3, dtype=np.float64)
16
+
17
+ def __repr__(self):
18
+ return f"Matrix3(\n{self.matrix}\n)"
19
+
20
+ def __matmul__(self, other):
21
+ """
22
+ Matrix multiplication.
23
+ If 'other' is a Vec3, it returns a transformed Vec3.
24
+ """
25
+ if isinstance(other, Vec3):
26
+ # Matrix @ Vector
27
+ vec_np = np.array([other.x, other.y, other.z])
28
+ result_np = self.matrix @ vec_np
29
+ return Vec3(result_np[0], result_np[1], result_np[2])
30
+ if isinstance(other, Matrix3):
31
+ # Matrix @ Matrix
32
+ return Matrix3(self.matrix @ other.matrix)
33
+ return NotImplemented
34
+
35
+ @staticmethod
36
+ def from_euler_angles(yaw_degrees=0, pitch_degrees=0, roll_degrees=0):
37
+ """
38
+ Creates a rotation matrix using Minecraft/Game conventions:
39
+ - Yaw: Rotation around Y (Up) axis.
40
+ - Pitch: Rotation around X (Right) axis.
41
+ - Roll: Rotation around Z (Forward) axis.
42
+
43
+ Order of operations: Yaw -> Pitch -> Roll (R = Ry @ Rx @ Rz)
44
+ """
45
+ y = math.radians(yaw_degrees)
46
+ p = math.radians(pitch_degrees)
47
+ r = math.radians(roll_degrees)
48
+
49
+ # Yaw (Around Y)
50
+ Ry = np.array([
51
+ [math.cos(y), 0, math.sin(y)],
52
+ [0, 1, 0],
53
+ [-math.sin(y), 0, math.cos(y)]
54
+ ])
55
+
56
+ # Pitch (Around X)
57
+ Rx = np.array([
58
+ [1, 0, 0],
59
+ [0, math.cos(p), -math.sin(p)],
60
+ [0, math.sin(p), math.cos(p)]
61
+ ])
62
+
63
+ # Roll (Around Z)
64
+ Rz = np.array([
65
+ [math.cos(r), -math.sin(r), 0],
66
+ [math.sin(r), math.cos(r), 0],
67
+ [0, 0, 1]
68
+ ])
69
+
70
+ # Combined rotation: Ry @ Rx @ Rz
71
+ return Matrix3(Ry @ Rx @ Rz)
72
+
73
+ @staticmethod
74
+ def identity():
75
+ return Matrix3(np.identity(3))
76
+
77
+ def rotate_around_point(self, vector: Vec3, pivot: Vec3) -> Vec3:
78
+ """
79
+ Rotates a vector around an arbitrary pivot point instead of the origin.
80
+ """
81
+ # 1. Move the vector so the pivot is at (0,0,0)
82
+ local_offset = vector - pivot
83
+ # 2. Rotate the local offset
84
+ rotated_offset = self @ local_offset
85
+ # 3. Move it back to world space
86
+ return pivot + rotated_offset
@@ -18,12 +18,11 @@ from mcshell.ppdownloader import *
18
18
 
19
19
  from mcshell.mcserver import stop_app_server
20
20
 
21
- #pycraft.settings
22
- SHOW_DEBUG=False
23
- SHOW_Log=False
21
+ import atexit
24
22
 
25
23
  @magics_class
26
24
  class MCShell(Magics):
25
+
27
26
  def __init__(self,shell):
28
27
  super(MCShell,self).__init__(shell)
29
28
 
@@ -85,24 +84,22 @@ class MCShell(Magics):
85
84
 
86
85
  @line_magic
87
86
  def pp_create_world(self, line):
88
- """
89
- Creates a new, self-contained Paper server instance in its own directory.
90
- Usage: % pp_create_world < world_name > --version=<mc_version>
91
- Example: %pp_create_world my_creative_world
92
- """
93
87
  args = line.split()
94
88
  if not args:
95
- print("Usage: %pp_create_world <world_name> [--version=<mc_version>]")
89
+ print("Usage: %pp_create_world <world_name> [--version=<v>] [--datapacks=p1,p2]")
96
90
  return
97
91
 
98
92
  world_name = args[0]
99
- mc_version = MC_VERSION # default
93
+ mc_version = MC_VERSION
94
+ datapacks_to_install = []
100
95
 
101
- # Simple argument parsing for --version flag if we use it
102
- # Usage: % pp_create_world < world_name > --version = < mc_version >
96
+ # Enhanced argument parsing
103
97
  for arg in args[1:]:
104
98
  if arg.startswith("--version="):
105
99
  mc_version = arg.split('=', 1)[1]
100
+ elif arg.startswith("--datapacks="):
101
+ # Expects a comma-separated list of names
102
+ datapacks_to_install = arg.split('=', 1)[1].split(',')
106
103
 
107
104
  # Define paths
108
105
  world_dir = MC_WORLDS_BASE_DIR.joinpath(world_name)
@@ -223,6 +220,30 @@ class MCShell(Magics):
223
220
  if plugin_urls:
224
221
  downloader.install_plugins(plugin_urls, plugins_dir)
225
222
 
223
+ # --- Datapack Installation Logic ---
224
+ if datapacks_to_install:
225
+ # Datapacks must be in 'world/datapacks' for first-run generation
226
+ world_datapacks_dir = world_dir / "world" / "datapacks"
227
+ world_datapacks_dir.mkdir(parents=True, exist_ok=True)
228
+
229
+ for pack_name in datapacks_to_install:
230
+ pack_name = pack_name.strip()
231
+ source = MC_DATAPACK_LIB_DIR / pack_name
232
+
233
+ # Check for the name directly (folder) or with .zip extension
234
+ if not source.exists():
235
+ source = MC_DATAPACK_LIB_DIR / f"{pack_name}.zip"
236
+
237
+ if source.exists():
238
+ target = world_datapacks_dir / source.name
239
+ if source.is_dir():
240
+ shutil.copytree(source, target)
241
+ else:
242
+ shutil.copy2(source, target)
243
+ print(f"Installed datapack: {pack_name}")
244
+ else:
245
+ print(f"Warning: Datapack '{pack_name}' not found in library.")
246
+
226
247
  print(f"\nWorld '{world_name}' created successfully.")
227
248
  print(f"To start it, run: %pp_start_world {world_name}")
228
249
 
@@ -763,12 +784,13 @@ class MCShell(Magics):
763
784
 
764
785
  RUNNING_POWERS[execution_id] = {'thread': thread, 'cancel_event': cancel_event}
765
786
 
766
- # --- Save Metadata (This part remains synchronous) ---
767
787
  power_repo = JsonFileRepository(player_name)
768
788
 
769
789
  if power_repo:
770
790
  print(f"--- Power '{metadata.get('function_name')}' metadata defined/updated. ---")
771
791
  print(f"--- Started debug execution with ID: {execution_id} ---")
792
+ # ADD THIS LINE: A specific prefix for the frontend to find
793
+ print(f"MCED_EXECUTION_ID:{execution_id}")
772
794
  print("--- To stop it, run: %mc_cancel_power " + execution_id + " ---")
773
795
 
774
796
  except Exception as e:
@@ -977,13 +999,29 @@ class MCShell(Magics):
977
999
  except requests.exceptions.RequestException as e:
978
1000
  print(f"Error: Could not connect to the other player's application server. {e}")
979
1001
 
980
- import atexit # <-- Import the standard library module
1002
+ def sync_datapack_library():
1003
+ """
1004
+ Synchronizes the internal datapack library to the user's worlds directory.
1005
+ Does not overwrite existing files to allow students to tweak their copies.
1006
+ """
1007
+ if MC_INTERNAL_DATAPACKS.exists():
1008
+ MC_DATAPACK_LIB_DIR.mkdir(parents=True, exist_ok=True)
1009
+ for item in MC_INTERNAL_DATAPACKS.iterdir():
1010
+ target = MC_DATAPACK_LIB_DIR / item.name
1011
+ if not target.exists():
1012
+ if item.is_dir():
1013
+ shutil.copytree(item, target)
1014
+ else:
1015
+ shutil.copy2(item, target)
981
1016
 
982
1017
  def load_ipython_extension(ip):
983
1018
  """
984
1019
  Called by IPython when the extension is loaded.
985
1020
  This is where we register the magics and the shutdown hook.
986
1021
  """
1022
+
1023
+ sync_datapack_library()
1024
+
987
1025
  # Register the main magic class
988
1026
  mcshell_instance = MCShell(ip)
989
1027
  ip.register_magics(mcshell_instance)
@@ -96,6 +96,16 @@ MC_CONTROL_LAYOUT_PATH = MC_DATA_DIR.joinpath('control_layout.json')
96
96
  MC_WORLDS_BASE_DIR = pathlib.Path('~').expanduser().joinpath('mc-worlds')
97
97
  MC_CENTRAL_CONFIG_FILE = pathlib.Path("/etc/mc-shell/user_map.json")
98
98
 
99
+ # new: datapacks
100
+ MC_INTERNAL_DATAPACKS = MC_DATA_DIR / 'datapacks'
101
+ MC_DATAPACK_LIB_DIR = MC_WORLDS_BASE_DIR / 'datapacks-library'
102
+
103
+ MC_JRE_DIR = MC_WORLDS_BASE_DIR / 'jre'
104
+ # Determine the binary name based on the OS
105
+ JRE_BINARY = "java.exe" if os.name == "nt" else "bin/java"
106
+
107
+ MC_JRE_PATH = MC_JRE_DIR / JRE_BINARY
108
+
99
109
  RE_NON_JSON_VALUE = r"(?<!\")\b(?:[0-9]+[a-zA-Z]+|[0-9]+(?:\.[0-9]+)?[a-zA-Z]+|true|false|null)\b(?!\")"
100
110
  RE_NON_JSON_ARRAY = r"\[[BISL];\s*[^\]]+\]"
101
111
 
@@ -1,7 +1,4 @@
1
- <!DOCTYPE html><html lang=en><script type=importmap>{"imports":{"2N3MJ":"/toolbox.f17a15a5.xml"}}</script><script type=module src=/mced.a4de160c.js></script><link rel=stylesheet href=/mced.9b908af4.css><meta charset=utf-8><title>MC-ED Editor</title><link rel=stylesheet href=/mced.b6ed8b22.css><body x-data="{
2
- isLibraryCollapsed: false,
3
- isCodeCollapsed: false
4
- }">
1
+ <!DOCTYPE html><html lang=en><script type=importmap>{"imports":{"2N3MJ":"/toolbox.57f1313e.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 }">
5
2
  <div class=editor-layout :class="{ 'library-collapsed': isLibraryCollapsed, 'code-collapsed': isCodeCollapsed }">
6
3
  <aside id=power-library-panel>
7
4
 
@@ -21,11 +18,18 @@
21
18
 
22
19
  <main id=main-content-panel>
23
20
  <div id=controls>
21
+ <button @click="isLibraryCollapsed = !isLibraryCollapsed">Toggle Library</button>
22
+ <button @click="isCodeCollapsed = !isCodeCollapsed">Toggle Code</button>
23
+
24
24
  <button id=savePowerAsButton @click=prepareAndOpenSaveModal()>Save/Update Power...</button>
25
25
  <button id=loadPowerFromFileButton>Load from File...</button>
26
26
 
27
27
  <button id=executePowerButton>Execute (Debug)</button>
28
+ <button id=cancelPowerButton style=color:#fff;background-color:#d9534f>Cancel Power</button>
28
29
  <button id=clearWorkspaceButton>Clear Workspace</button>
30
+ <button class=control-button @click="keyboardVisible = !keyboardVisible" :class="keyboardVisible ? 'btn-active' : ''">
31
+ <i class="fa-keyboard fas"></i> Toggle Keyboard
32
+ </button>
29
33
  </div>
30
34
  <div id=blocklyDiv></div>
31
35
  </main>
@@ -109,8 +113,37 @@
109
113
  </div>
110
114
  </div>
111
115
  </div>
116
+
117
+ <div x-data="{
118
+ show: false,
119
+ message: '',
120
+ defaultValue: '',
121
+ callback: null,
122
+ inputValue: ''
123
+ }" @blockly-prompt.window="
124
+ show = true;
125
+ message = $event.detail.message;
126
+ defaultValue = $event.detail.defaultValue;
127
+ /* Change this line to use onComplete */
128
+ callback = $event.detail.onComplete;
129
+ /* callback = $event.detail.callback; */
130
+ inputValue = $event.detail.defaultValue;
131
+ // Use nextTick to wait for the modal to be visible before focusing
132
+ $nextTick(() => { $refs.promptInput.focus(); });
133
+ " x-show=show class=modal-overlay style=z-index:35000> <div class=modal-content>
134
+ <p x-text=message></p>
135
+ <input x-model=inputValue @keyup.enter="callback(inputValue); show = false;">
136
+ <div class=modal-buttons>
137
+ <button @click="callback(inputValue); show = false;">OK</button>
138
+ <button @click="callback(null); show = false;">Cancel</button>
139
+ </div>
140
+ </div>
141
+ </div>
142
+
112
143
  </div>
113
144
  </template>
114
145
 
115
- <script type=module src=/mced.0c019c78.js></script>
146
+ <script type=module src=/mced.aa2df54f.js></script>
147
+ <div class=simple-keyboard x-show=keyboardVisible style=z-index:20000;background:#fff;width:100%;position:fixed;bottom:0;left:0>
148
+ </div>
116
149
 
@@ -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}.editor-layout{box-sizing:border-box;grid-template-columns:300px 1fr 100ch;gap:8px;height:100%;padding:8px;transition:grid-template-columns .25s ease-in-out;display:grid}#power-library-panel{background-color:#fff;border-radius:8px;flex-direction:column;min-width:0;display:flex;overflow-y:auto;box-shadow:0 2px 4px #0000001a}#power-list{flex-grow:1;padding:8px}#main-content-panel{flex-direction:column;gap:8px;min-width:0;display:flex}#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{cursor:pointer;background-color:#f7f7f7;border:1px solid #ccc;border-radius:4px;padding:6px 12px}#controls button:hover{background-color:#e9e9e9;border-color:#bbb}#blocklyDiv{flex-grow:1;position:relative!important}#code-container{color:#f8f8f2;box-sizing:border-box;white-space:pre-wrap;overflow-wrap:break-word;word-break:break-word;background-color:#272822;flex-grow:1;margin:0;padding:1em;font-family:Fira Code,Dank Mono,monospace;font-size:14px;line-height:1.5;overflow:auto}.editor-layout{width:100vw;height:100vh;display:flex;overflow:hidden}#power-library-panel,#code-preview-panel{flex-direction:column;transition:width .3s;display:flex;overflow-x:hidden}#main-content-panel{flex-direction:column;flex:1;min-width:0;display:flex}.library-collapsed #power-library-panel,.code-collapsed #code-preview-panel{border:none!important;width:0!important;min-width:0!important;padding:0!important}.simple-keyboard{background-color:#fff;width:100%;position:fixed;bottom:0;left:0;box-shadow:0 -5px 20px #0000004d;z-index:50000!important}.simple-keyboard.hg-layout-numpad{max-width:300px;margin:0 auto}.hg-button{height:60px!important;font-size:1.2rem!important}[x-cloak]{display:none!important}.modal-overlay{z-index:40000;background-color:#0009;width:100%;height:100%;position:fixed;top:0;left:0}.modal-content{background-color:#fff;border-radius:12px;width:90%;max-width:500px;padding:25px;transition:all .2s ease-out;position:fixed;left:50%;box-shadow:0 5px 15px #0000004d;z-index:40001!important;top:30%!important;transform:translate(-50%,-30%)scale(1)!important}.modal-content input{width:100%;margin:15px 0;padding:10px;font-size:1.1rem}.modal-buttons{justify-content:flex-end;gap:10px;display:flex}.enter-start{opacity:0;transform:translate(-50%,-50%)scale(.95)}.enter-end,.leave-start{opacity:1;transform:translate(-50%,-50%)scale(1)}.leave-end{opacity:0;transform:translate(-50%,-50%)scale(.95)}.editor-layout.library-collapsed{grid-template-columns:45px 1fr 100ch}.editor-layout.code-collapsed{grid-template-columns:300px 1fr 40ch}.editor-layout.library-collapsed.code-collapsed{grid-template-columns:45px 1fr 40ch}#code-preview-panel{background-color:#fff;border-radius:8px;flex-direction:column;display:flex;overflow:hidden;box-shadow:0 2px 4px #0000001a}.panel-header{border-bottom:1px solid #e0e0e0;flex-shrink:0;justify-content:space-between;align-items:center;padding:12px 16px;display:flex}#power-library-panel h2{border-bottom:none;margin:0;padding:0;font-size:16px}.code-header{color:#555;background-color:#f7f7f7;border-top:1px solid #ccc;border-bottom:1px solid #ccc;padding:4px 10px;font-size:13px;font-weight:500}.toggle-btn{cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;padding:2px 6px;font-size:16px;line-height:1}.toggle-btn:hover{background-color:#e0e0e0}
2
+ /*# sourceMappingURL=mced.55f94dd4.css.map */
@@ -0,0 +1 @@
1
+ {"mappings":"ACCA,4KAUA,0KAUA,2JAiBA,oCAMA,2EAOA,yIAWA,kHAQA,kEAgBA,oDAqCA,yQA0BA,qEAQA,mHAQA,0EAQA,8JAcA,0IAiBA,gEAMA,4DAOA,iCAIA,uGAUA,8QAwCA,4EAOA,8DASA,gEAKA,yEAUA,8DAOA,sEASA,mEAKA,oFASA,8IAqCA,4IAQA,6EAMA,wJASA,gIASA","sources":["mced.55f94dd4.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.editor-layout {\n box-sizing: border-box;\n grid-template-columns: 300px 1fr 100ch;\n gap: 8px;\n height: 100%;\n padding: 8px;\n transition: grid-template-columns .25s ease-in-out;\n display: grid;\n}\n\n#power-library-panel {\n background-color: #fff;\n border-radius: 8px;\n flex-direction: column;\n min-width: 0;\n display: flex;\n overflow-y: auto;\n box-shadow: 0 2px 4px #0000001a;\n}\n\n#power-list {\n flex-grow: 1;\n padding: 8px;\n}\n\n#main-content-panel {\n flex-direction: column;\n gap: 8px;\n min-width: 0;\n display: flex;\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 {\n cursor: pointer;\n background-color: #f7f7f7;\n border: 1px solid #ccc;\n border-radius: 4px;\n padding: 6px 12px;\n}\n\n#controls button:hover {\n background-color: #e9e9e9;\n border-color: #bbb;\n}\n\n#blocklyDiv {\n flex-grow: 1;\n position: relative !important;\n}\n\n#code-container {\n color: #f8f8f2;\n box-sizing: border-box;\n white-space: pre-wrap;\n overflow-wrap: break-word;\n word-break: break-word;\n background-color: #272822;\n flex-grow: 1;\n margin: 0;\n padding: 1em;\n font-family: Fira Code, Dank Mono, monospace;\n font-size: 14px;\n line-height: 1.5;\n overflow: auto;\n}\n\n.editor-layout {\n width: 100vw;\n height: 100vh;\n display: flex;\n overflow: hidden;\n}\n\n#power-library-panel, #code-preview-panel {\n flex-direction: column;\n transition: width .3s;\n display: flex;\n overflow-x: hidden;\n}\n\n#main-content-panel {\n flex-direction: column;\n flex: 1;\n min-width: 0;\n display: flex;\n}\n\n.library-collapsed #power-library-panel, .code-collapsed #code-preview-panel {\n border: none !important;\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\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.simple-keyboard.hg-layout-numpad {\n max-width: 300px;\n margin: 0 auto;\n}\n\n.hg-button {\n height: 60px !important;\n font-size: 1.2rem !important;\n}\n\n[x-cloak] {\n display: none !important;\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 background-color: #fff;\n border-radius: 12px;\n width: 90%;\n max-width: 500px;\n padding: 25px;\n transition: all .2s ease-out;\n position: fixed;\n left: 50%;\n box-shadow: 0 5px 15px #0000004d;\n z-index: 40001 !important;\n top: 30% !important;\n transform: translate(-50%, -30%)scale(1) !important;\n}\n\n.modal-content input {\n width: 100%;\n margin: 15px 0;\n padding: 10px;\n font-size: 1.1rem;\n}\n\n.modal-buttons {\n justify-content: flex-end;\n gap: 10px;\n display: flex;\n}\n\n.enter-start {\n opacity: 0;\n transform: translate(-50%, -50%)scale(.95);\n}\n\n.enter-end, .leave-start {\n opacity: 1;\n transform: translate(-50%, -50%)scale(1);\n}\n\n.leave-end {\n opacity: 0;\n transform: translate(-50%, -50%)scale(.95);\n}\n\n.editor-layout.library-collapsed {\n grid-template-columns: 45px 1fr 100ch;\n}\n\n.editor-layout.code-collapsed {\n grid-template-columns: 300px 1fr 40ch;\n}\n\n.editor-layout.library-collapsed.code-collapsed {\n grid-template-columns: 45px 1fr 40ch;\n}\n\n#code-preview-panel {\n background-color: #fff;\n border-radius: 8px;\n flex-direction: column;\n display: flex;\n overflow: hidden;\n box-shadow: 0 2px 4px #0000001a;\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#power-library-panel h2 {\n border-bottom: none;\n margin: 0;\n padding: 0;\n font-size: 16px;\n}\n\n.code-header {\n color: #555;\n background-color: #f7f7f7;\n border-top: 1px solid #ccc;\n border-bottom: 1px solid #ccc;\n padding: 4px 10px;\n font-size: 13px;\n font-weight: 500;\n}\n\n.toggle-btn {\n cursor: pointer;\n background: none;\n border: 1px solid #0000;\n border-radius: 4px;\n padding: 2px 6px;\n font-size: 16px;\n line-height: 1;\n}\n\n.toggle-btn:hover {\n background-color: #e0e0e0;\n}\n/*# sourceMappingURL=mced.55f94dd4.css.map */\n","/* General layout for the entire page */\nhtml, body {\n height: 100vh; /* Use 100% of the viewport height */\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 the body itself from scrolling */\n}\n\n/* Make the grid container fill its parent (the body) */\n.editor-layout {\n display: grid;\n height: 100%; /* Fill the full height of the body */\n grid-template-columns: 300px 1fr 100ch;\n transition: grid-template-columns 0.25s ease-in-out;\n gap: 8px;\n padding: 8px;\n box-sizing: border-box;\n}\n/* --- Left Panel: Power Library --- */\n#power-library-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 overflow-y: auto; /* Allow scrolling if the list of powers is long */\n min-width: 0;\n}\n\n#power-library-panel h2 {\n padding: 12px 16px;\n margin: 0;\n border-bottom: 1px solid #e0e0e0;\n font-size: 16px;\n}\n\n#power-list {\n padding: 8px;\n flex-grow: 1; /* Allow the list to fill the available space */\n}\n\n/* --- Right Panel: Main Content --- */\n#main-content-panel {\n display: flex;\n flex-direction: column; /* Stack the toolbar, editor, and preview vertically */\n gap: 8px;\n min-width: 0;\n}\n\n#controls {\n flex-shrink: 0; /* Prevent the control bar from shrinking */\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; /* Allow buttons to wrap on smaller screens */\n gap: 8px;\n}\n\n#controls button {\n padding: 6px 12px;\n border: 1px solid #ccc;\n background-color: #f7f7f7;\n border-radius: 4px;\n cursor: pointer;\n}\n\n#controls button:hover {\n background-color: #e9e9e9;\n border-color: #bbb;\n}\n\n/*#editor-preview-pane {*/\n/* flex-grow: 1; !* This pane will take up the remaining vertical space *!*/\n/* display: flex;*/\n/* flex-direction: column; !* To stack Blockly and the code display *!*/\n/* border: 1px solid #ccc;*/\n/* border-radius: 8px;*/\n/* overflow: hidden; !* Hide anything that spills out *!*/\n/* background-color: #ffffff;*/\n/* min-height: 0; !* Add this for better flexbox behavior in some browsers *!*/\n/*}*/\n\n#blocklyDiv {\n flex-grow: 1; /* Blockly editor takes up most of the space in this pane */\n /*position: relative; !* Needed for Blockly's UI elements *!*/\n position: relative !important;\n}\n\n/* Ensure the main container can hold the absolute button */\n/*#blocklyDiv {*/\n/* position: relative !important;*/\n/*}*/\n\n/*.toolbox-toggle-btn {*/\n/* position: absolute;*/\n/* top: 10px;*/\n/* !* 'left' is now managed by JS to track the toolbox width *!*/\n/* width: 44px;*/\n/* height: 44px;*/\n/* background: #333;*/\n/* color: white;*/\n/* display: flex;*/\n/* align-items: center;*/\n/* justify-content: center;*/\n/* border-radius: 0 8px 8px 0;*/\n/* cursor: pointer;*/\n/* z-index: 1000; !* Over everything *!*/\n/* box-shadow: 2px 0 10px rgba(0,0,0,0.5);*/\n/* transition: left 0.3s ease-in-out;*/\n/*}*/\n\n/*.blocklyToolboxDiv {*/\n/* transition: transform 0.3s ease-in-out;*/\n/* !* No more overflow:visible needed here since button is outside *!*/\n/*}*/\n\n/*.toolbox-collapsed {*/\n/* transform: translateX(-100%);*/\n/*}*/\n#code-container {\n /* REMOVED: height: 250px; */\n /* REMOVED: flex-shrink: 0; */\n\n /* ADDED: This tells the element to grow and fill all available vertical space */\n /* in its parent flex container (#code-preview-panel). */\n flex-grow: 1;\n\n /* These properties remain the same */\n margin: 0;\n overflow: auto; /* For vertical AND horizontal scrolling if needed */\n background-color: #272822;\n color: #f8f8f2;\n font-family: 'Fira Code', 'Dank Mono', monospace;\n font-size: 14px;\n line-height: 1.5;\n padding: 1em;\n box-sizing: border-box;\n\n /* Wrapping rules remain the same */\n white-space: pre-wrap;\n overflow-wrap: break-word;\n word-break: break-word;\n}\n/*-------------------------------------------------------------*/\n/* Ensure the layout container can shrink its children to 0 */\n.editor-layout {\n display: flex;\n width: 100vw;\n height: 100vh;\n overflow: hidden;\n}\n\n/* Base styles for the side panels */\n#power-library-panel, #code-preview-panel {\n transition: width 0.3s ease;\n overflow-x: hidden; /* Critical: hides content as width hits 0 */\n display: flex;\n flex-direction: column;\n}\n\n/* Central panel grows to take all remaining space */\n#main-content-panel {\n flex: 1;\n display: flex;\n flex-direction: column;\n min-width: 0; /* Allows the panel to shrink/grow correctly in flex */\n}\n\n/* Collapsed States */\n.library-collapsed #power-library-panel {\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\n border: none !important;\n}\n\n.code-collapsed #code-preview-panel {\n width: 0 !important;\n min-width: 0 !important;\n padding: 0 !important;\n border: none !important;\n}\n/*-------------------------------------------------------------*/\n.simple-keyboard {\n z-index: 50000 !important; /* Higher than modals and Blockly widgets */\n position: fixed;\n bottom: 0;\n left: 0;\n width: 100%;\n background-color: white; /* Ensure it's not transparent */\n box-shadow: 0 -5px 20px rgba(0,0,0,0.3);\n}\n\n/* Ensure the keys are large enough for touchscreens */\n.hg-button {\n height: 50px !important;\n font-size: 20px !important;\n}\n\n/* Center the numpad and give it a calculator-like width */\n.simple-keyboard.hg-layout-numpad {\n max-width: 300px;\n margin: 0 auto; /* Center it at the bottom of the screen */\n}\n\n/* Ensure keys are large and easy to hit on a touchscreen */\n.hg-button {\n height: 60px !important;\n font-size: 1.2rem !important;\n}\n\n/* --- MODAL STYLES --- */\n\n[x-cloak] {\n display: none !important;\n}\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 /*top: 50%;*/\n left: 50%;\n /* Start with the final transform state so transitions work correctly */\n /*transform: translate(-50%, -50%) scale(1);*/\n background-color: white;\n padding: 25px;\n border-radius: 12px;\n box-shadow: 0 5px 15px rgba(0,0,0,0.3);\n /*z-index: 1001;*/\n width: 90%;\n max-width: 500px;\n /* Define the transition properties on the base class */\n transition: all 0.2s ease-out;\n z-index: 40001 !important; /* One step above the backdrop */\n\n /* 3. Adjust Positioning for Portrait Monitors */\n /* Instead of top: 50%, move it higher to stay clear of the keyboard */\n top: 30% !important;\n transform: translate(-50%, -30%) scale(1) !important;\n}\n\n/*.modal-overlay {*/\n/* position: fixed;*/\n/* top: 0; left: 0; width: 100%; height: 100%;*/\n/* background: rgba(0,0,0,0.5);*/\n/* display: flex;*/\n/* justify-content: center;*/\n/* align-items: center;*/\n/*}*/\n\n/*.modal-content {*/\n/* background: white;*/\n/* padding: 20px;*/\n/* border-radius: 8px;*/\n/* box-shadow: 0 4px 15px rgba(0,0,0,0.3);*/\n/* min-width: 300px;*/\n/*}*/\n\n.modal-content input {\n width: 100%;\n margin: 15px 0;\n padding: 10px;\n font-size: 1.1rem;\n}\n\n.modal-buttons {\n display: flex;\n justify-content: flex-end;\n gap: 10px;\n}\n/* --- CORRECTED ALPINE.JS TRANSITION CLASSES --- */\n/* These are the classes that Alpine v3 actually adds to the element */\n\n/* State BEFORE the element enters. It's invisible and slightly smaller. */\n.enter-start {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n}\n/* State AFTER the element has finished entering. Fully visible. */\n.enter-end {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n}\n/* State BEFORE the element starts to leave. Fully visible. */\n.leave-start {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n}\n/* State AFTER the element has finished leaving. Invisible. */\n.leave-end {\n opacity: 0;\n transform: translate(-50%, -50%) scale(0.95);\n}\n\n\n/* When the library is collapsed, shrink the first column */\n.editor-layout.library-collapsed {\n grid-template-columns: 45px 1fr 100ch;\n}\n\n/* NEW: When the code preview is collapsed, shrink the third column */\n/*.editor-layout.code-collapsed {*/\n/* grid-template-columns: 300px 1fr 0px;*/\n/*}*/\n/* When the code preview is collapsed, shrink the third column to 45px */\n.editor-layout.code-collapsed {\n grid-template-columns: 300px 1fr 40ch;\n}\n\n/* Also update the rule for when both are collapsed */\n.editor-layout.library-collapsed.code-collapsed {\n grid-template-columns: 45px 1fr 40ch;\n}\n/* Handle both being collapsed at the same time */\n/*.editor-layout.library-collapsed.code-collapsed {*/\n/* grid-template-columns: 45px 1fr 0px;*/\n/*}*/\n\n/* NEW: Add styles for the new right-hand column */\n#code-preview-panel {\n display: flex;\n flex-direction: column;\n background-color: #ffffff;\n border-radius: 8px;\n box-shadow: 0 2px 4px rgba(0,0,0,0.1);\n overflow: hidden; /* Hide content when collapsed */\n}\n\n/* Add a transition to the grid layout for smooth sidebar animation */\n/*.editor-layout {*/\n/* display: grid;*/\n/* grid-template-columns: 300px 1fr;*/\n/* transition: grid-template-columns 0.25s ease-in-out;*/\n/* !* ... other existing styles ... *!*/\n/*}*/\n\n/* When the library is collapsed, animate the grid column to a small width */\n/*.editor-layout.library-collapsed {*/\n/* grid-template-columns: 45px 1fr; !* Shrink to just wide enough for the button *!*/\n/*}*/\n\n/* Add a transition for the code container's height and padding */\n/*#code-container {*/\n/* transition: height 0.25s ease-in-out, padding 0.25s ease-in-out, border 0.25s ease-in-out;*/\n/* !* ... all your other existing styles for #code-container ... *!*/\n/*}*/\n\n/* When the code pane is collapsed, set the code container's height to 0 */\n/*#editor-preview-pane.code-pane-collapsed #code-container {*/\n/* height: 0;*/\n/* padding-top: 0;*/\n/* padding-bottom: 0;*/\n/* border-top-width: 0;*/\n/*}*/\n\n/* --- You may also need to add these styles for the new panel-header --- */\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; /* Prevent header from shrinking when content scrolls */\n}\n#power-library-panel h2 {\n padding: 0; /* Remove padding from h2 since it's now in panel-header */\n border-bottom: none;\n margin: 0;\n font-size: 16px;\n}\n.code-header {\n padding: 4px 10px;\n background-color: #f7f7f7;\n border-top: 1px solid #ccc;\n border-bottom: 1px solid #ccc;\n color: #555;\n font-size: 13px;\n font-weight: 500;\n}\n.toggle-btn {\n background: none;\n border: 1px solid transparent;\n border-radius: 4px;\n cursor: pointer;\n font-size: 16px;\n line-height: 1;\n padding: 2px 6px;\n}\n.toggle-btn:hover {\n background-color: #e0e0e0;\n}\n\n/* When the parent pane is marked as collapsed... */\n/*#editor-preview-pane.code-pane-collapsed .code-header {*/\n/* !* You might want to keep the header visible to allow re-opening,*/\n/* but we can hide the text inside it if we want.*/\n/* Or just let it be. The toggle button is what matters. *!*/\n/*}*/\n\n/*!* ...target the code container and set its height to 0. *!*/\n/*!* This makes it take up no space in the flex layout. *!*/\n/*#editor-preview-pane.code-pane-collapsed #code-container {*/\n/* height: 0;*/\n/* padding-top: 0;*/\n/* padding-bottom: 0;*/\n/* border-top-width: 0;*/\n/* overflow: hidden; !* Hide scrollbars during collapse *!*/\n/*}*/\n\n/*\nBecause #code-container now takes up 0 height, the #blocklyDiv (with its flex-grow: 1)\nwill automatically expand to fill the space that was just freed up inside the\n#editor-preview-pane flex container.\n*/\n\n\n"],"names":[],"version":3,"file":"mced.55f94dd4.css.map"}