mc-shell 0.6.7__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.
- {mc_shell-0.6.7 → mc_shell-0.6.8}/PKG-INFO +1 -1
- mc_shell-0.6.8/mcshell/Matrix3.py +86 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/__init__.py +52 -14
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/constants.py +4 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/app/index.html +38 -5
- mc_shell-0.6.8/mcshell/data/app/mced.55f94dd4.css +2 -0
- mc_shell-0.6.8/mcshell/data/app/mced.55f94dd4.css.map +1 -0
- mc_shell-0.6.7/mcshell/data/app/mced.d19475c4.js → mc_shell-0.6.8/mcshell/data/app/mced.aa2df54f.js +90 -89
- mc_shell-0.6.8/mcshell/data/app/mced.aa2df54f.js.map +1 -0
- mc_shell-0.6.8/mcshell/data/app/mced.efd4d8e7.css +13 -0
- mc_shell-0.6.8/mcshell/data/app/mced.efd4d8e7.css.map +1 -0
- mc_shell-0.6.7/mcshell/data/app/toolbox.f17a15a5.xml → mc_shell-0.6.8/mcshell/data/app/toolbox.57f1313e.xml +20 -13
- mc_shell-0.6.8/mcshell/data/datapacks/flat_world/data/minecraft/dimension/overworld.json +17 -0
- mc_shell-0.6.8/mcshell/data/datapacks/flat_world/data/minecraft/worldgen/biome/the_void.json +28 -0
- mc_shell-0.6.8/mcshell/data/datapacks/flat_world/pack.mcmeta +6 -0
- mc_shell-0.6.8/mcshell/data/datapacks/void_world/data/minecraft/dimension/overworld.json +17 -0
- mc_shell-0.6.8/mcshell/data/datapacks/void_world/data/minecraft/functions/init.mcfunction +4 -0
- mc_shell-0.6.8/mcshell/data/datapacks/void_world/data/minecraft/tags/functions/load.json +5 -0
- mc_shell-0.6.8/mcshell/data/datapacks/void_world/data/minecraft/worldgen/biome/the_void.json +28 -0
- mc_shell-0.6.8/mcshell/data/datapacks/void_world/pack.mcmeta +6 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/materials/colourables.json +138 -138
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/materials/pickers.json +163 -163
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcactions.py +155 -47
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcactions_base.py +50 -9
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcblockly.py +12 -3
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcplayer.py +122 -14
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcserver.py +8 -7
- mc_shell-0.6.8/mcshell/mcturtle.py +443 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcvoxel_original.py +1 -1
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/ppmanager.py +2 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/pyncactions.py +11 -6
- mc_shell-0.6.8/mcshell/vendored/pyncraft/__init__.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/minecraft.py +6 -8
- {mc_shell-0.6.7 → mc_shell-0.6.8}/pyproject.toml +1 -1
- mc_shell-0.6.7/mcshell/Matrix3.py +0 -87
- mc_shell-0.6.7/mcshell/data/app/mced.9b908af4.css +0 -2
- mc_shell-0.6.7/mcshell/data/app/mced.9b908af4.css.map +0 -1
- mc_shell-0.6.7/mcshell/data/app/mced.b6ed8b22.css +0 -2
- mc_shell-0.6.7/mcshell/data/app/mced.b6ed8b22.css.map +0 -1
- mc_shell-0.6.7/mcshell/data/app/mced.d19475c4.js.map +0 -1
- mc_shell-0.6.7/mcshell/mcturtle.py +0 -422
- {mc_shell-0.6.7 → mc_shell-0.6.8}/LICENSE +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/README.md +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/Vec3.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/blueprints/control_api.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/blueprints/ipython_api.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/blueprints/powers_api.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/FruitJuice-0.3.0.jar +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/FruitJuice-0.4.0.jar +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/FruitJuice-0.4.1.jar +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/app/control.a8439284.css +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/app/control.a8439284.css.map +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/app/control.b03e9afc.js +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/app/control.b03e9afc.js.map +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/app/control.html +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/app/mced.a4de160c.js +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/app/mced.a4de160c.js.map +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/control_layout.json +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/doc/command_docs.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/entities/entity_id_map.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/entities/generate_entity_blocks.mjs +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/entities/pickers.json +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/materials/generate_material_blocks.mjs +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/materials/materials.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/materials/mcblocks.csv +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/materials/singles.json +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/paper-global-template.yaml +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/powers/stdlib.json +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/toolbox_template.xml +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/%3F.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/Commands.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/EntityType.java.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/Material.html.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ability.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/advancement.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/alwaysday.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/attribute.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ban-ip.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ban.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/banlist.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/bossbar.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/camera.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/camerashake.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/changesetting.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/clear.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/clearspawnpoint.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/clone.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/connect.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/damage.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/data.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/datapack.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/daylock.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/debug.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/dedicatedwsserver.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/defaultgamemode.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/deop.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/dialogue.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/difficulty.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/effect.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/enchant.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/event.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/execute.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/experience.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/fill.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/fillbiome.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/fog.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/forceload.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/function.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/gamemode.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/gamerule.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/gametest.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/give.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/help.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/immutableworld.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/item.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/jfr.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/kick.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/kill.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/list.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/locate.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/loot.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/me.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/mobevent.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/msg.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/music.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/op.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ops.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/pardon-ip.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/pardon.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/particle.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/perf.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/permission.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/place_(Java_Edition).pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/playanimation.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/playsound.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/publish.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/random.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/recipe.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/reload.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/remove.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/replaceitem.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/return.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/ride.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/save-all.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/save-off.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/save-on.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/save.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/say.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/schedule.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/scoreboard.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/script.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/scriptevent.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/seed.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/setblock.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/setidletimeout.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/setmaxplayers.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/setworldspawn.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/spawnpoint.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/spectate.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/spreadplayers.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/stop.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/stopsound.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/structure.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/summon.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tag.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/team.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/teammsg.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/teleport.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tell.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tellraw.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/testfor.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/testforblock.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/testforblocks.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tickingarea.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/time.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/title.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/titleraw.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tm.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/toggledownfall.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/tp.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/transferserver.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/trigger.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/volumearea.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/w.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/wb.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/weather.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/whitelist.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/worldborder.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/worldbuilder.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/wsserver.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/data/webpage-cache/xp.pkl +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcclient.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mceventactions.py +0 -0
- /mc_shell-0.6.7/mcshell/vendored/pyncraft/__init__.py → /mc_shell-0.6.8/mcshell/mcexperience_base.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mclsystem.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcrepo.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcscraper.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcshell.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/mcvoxel.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/ppdownloader.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/serveractions.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/block.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/connection.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/entity.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/event.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/logger.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/util.py +0 -0
- {mc_shell-0.6.7 → mc_shell-0.6.8}/mcshell/vendored/pyncraft/vec3.py +0 -0
|
@@ -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
|
-
|
|
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=<
|
|
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
|
|
93
|
+
mc_version = MC_VERSION
|
|
94
|
+
datapacks_to_install = []
|
|
100
95
|
|
|
101
|
-
#
|
|
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
|
-
|
|
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,10 @@ 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
|
+
|
|
99
103
|
MC_JRE_DIR = MC_WORLDS_BASE_DIR / 'jre'
|
|
100
104
|
# Determine the binary name based on the OS
|
|
101
105
|
JRE_BINARY = "java.exe" if os.name == "nt" else "bin/java"
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
<!DOCTYPE html><html lang=en><script type=importmap>{"imports":{"2N3MJ":"/toolbox.
|
|
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.
|
|
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"}
|