mods that hopefully work for a TechAge-based pack
@@ -0,0 +1,666 @@
|
||||
# Modpack Tech Age [techage]
|
||||
|
||||
This modpack covers all necessary and useful mods to be able to use techage.
|
||||
All mods have their own README.txt. For further information please consult these files.
|
||||
|
||||
This modpack contains:
|
||||
- techage: The main mod
|
||||
- ta4_jetpack: A Jetpack for techage with hydrogen as fuel and TA4 recipe
|
||||
- ta4_paraglider: A Paraglider for techage with TA4 recipe
|
||||
- ta4_addons: A Touchscreen like the TA4 display, but with additional commands and features
|
||||
- autobahn: Street blocks and slopes with stripes for faster traveling (the only need of bitumen from techage)
|
||||
- compost: The garden soil is needed for the TA4 LED Grow Light based flower bed
|
||||
- signs_bot: For many automation tasks in TA3/TA4 like farming, mining, and item transportation
|
||||
- hyperloop: Used as passenger transportation system in TA4
|
||||
- techpack_stairway: Ladders, stairways, and bridges for your machines
|
||||
- minecart: Techage transportation system for oil and other items
|
||||
- towercrane: Simplifies the building of large techage plants
|
||||
- basic_materials: Needed items for many recipes
|
||||
- stamina: The "hunger" mod from "minetest-mods"
|
||||
- unified_inventory: Player's inventory with crafting guide, bags, and more.
|
||||
- tubelib2: Necessary library
|
||||
- networks: Necessary library
|
||||
- safer_lua: Necessary library
|
||||
- lcdlib: Necessary library
|
||||
- doclib: Necessary library
|
||||
- nanobasic: Optional library with support for the BASIC programming language (TA3 terminal)
|
||||
|
||||
|
||||
### Techage Manual
|
||||
|
||||
All techage manuals (EN/DE) are available ingame (craft the 'TA Construction Board')
|
||||
or use the manual on [GitHub](https://github.com/joe7575/techage/wiki).
|
||||
|
||||
|
||||
### Licenses
|
||||
|
||||
All mods have their own licenses. See the license files in the subfoldes.
|
||||
The modpack itself has the same license as the Mod Techage.
|
||||
|
||||
|
||||
### Further Dependencies
|
||||
|
||||
Required: Minetest Game
|
||||
|
||||
ta4_jetpack requires the modpack 3d_armor. 3d_armor is itself a modpack and can't be integrated into the techage modpack.
|
||||
|
||||
|
||||
### History
|
||||
|
||||
#### 2026-03-27
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- techage:
|
||||
- Bump version to V1.24
|
||||
- Add TA5 Digitizer and TA5 Control Unit with Lua/Beduino command interface
|
||||
- Add TA5 Cordless Screwdriver with preserve/restore feature
|
||||
- Add TA5 SSD as intermediate Digitizer ingredient
|
||||
- Add per-player active quarry limit (#65)
|
||||
- Add binary AND, OR, and XOR operators for NanoBasic
|
||||
- Add support for the mod too_many_stones
|
||||
- Add configurable basalt gravel sieving (Evgeniy)
|
||||
- Add Smartshop mod compatibility (Evgeniy)
|
||||
- Add no_silktouch group to burning lighters (Niklp09)
|
||||
- Display names for connected TA5 Teleport Blocks
|
||||
- Allow to take all items from a chest
|
||||
- Settable volumes for oven (acmgit)
|
||||
- Changed capacity of oven (acmgit)
|
||||
- Ensure generators are oriented correctly (Thomas--S)
|
||||
- Add missing valid sides registrations (Thomas--S)
|
||||
- Fix flywheel texture (Thomas--S)
|
||||
- Avoid unnecessary texture alpha blend for reactor shell (Thomas--S)
|
||||
- Fix injector issues (Thomas--S)
|
||||
- Replace square brackets with parenthesis for formspec image (Thomas--S)
|
||||
- Update translation script for stable sort order (Thomas--S)
|
||||
- Translation maintenance: add missing German translations (Thomas--S)
|
||||
- doorcontroller2: check node inventory before use (standmit)
|
||||
- Fix smartshop compatibility (standmit)
|
||||
- Restore French manual files (François Delpierre)
|
||||
- Improve TA5 fusion reactor error messages, manuals, and pump wrench menu
|
||||
- Thermal Storage: improve validation error messages
|
||||
- Controller: show error on insufficient experience points, add /help descriptions
|
||||
- Improve shell shape error message: show number of magnets with complete shell
|
||||
- Fix #215 (ta4_movecontroller stuck)
|
||||
- Fix #232 (Displays unable to write to row 10+ with string-type payload)
|
||||
- Fix #233 (Unable to read state of buttons 1 or 2 of 4x button using Beduino)
|
||||
- Fix #234 (Digging a pole-mounted yellow traffic light drops a black one)
|
||||
- Fix #242 (Nitrogencylinder = Hydrogencylinder)
|
||||
- Fix #245 (Pipe and pump water to boiler for TA3 Coal Power Station)
|
||||
- Fix #246 (TA4 Fuel Cell loses H2 charge when moved)
|
||||
- Fix #247 (TA2 Quarry sound keeps playing after turned off)
|
||||
- Fix #248 (TA4 Manual typos about Hydrogen)
|
||||
- Fix #249 (TA3 Chest + Injector + Furnace items lost)
|
||||
- Fix #250 (TA3 Booster name missing in Power Terminal)
|
||||
- Fix #157 (Admin Forceload Block Overview)
|
||||
- Fix #264 (Document ability to change radius of ta4 player detector)
|
||||
- Fix #267 (Crash: remove dofile of .test/ files not present in repo)
|
||||
- Fix everness bug (#27)
|
||||
- Fix growlight bug
|
||||
- Fix: re-register node number after cordless screwdriver placement
|
||||
- Fix: remove semicolons from textarea formspec strings in TA5 manuals
|
||||
|
||||
- signs_bot:
|
||||
- Fix farming crop grow bug
|
||||
- Fix compatibility with everness mod hammer functionality (François Delpierre)
|
||||
- Bugfix
|
||||
|
||||
- minecart:
|
||||
- Add Russian translation (randomei)
|
||||
|
||||
- hyperloop:
|
||||
- Prevent deprecation warning (use initial_properties)
|
||||
|
||||
- ta4_jetpack:
|
||||
- Fix bug with almost empty fuel tank
|
||||
|
||||
- ta4_addons:
|
||||
- Use \[png for matrix screen (Thomas--S)
|
||||
|
||||
- towercrane:
|
||||
- Add support for non-default games using xcompat (maplemedley)
|
||||
|
||||
- unified_inventory:
|
||||
- Support multiple craft outputs
|
||||
- Preserve metadata when using "Give me:"
|
||||
- Fix accessibility of the first and second inventory categories (z-op)
|
||||
- Include implicit tools in tools category (The4codeblocks)
|
||||
- Multiple bug fixes and improvements
|
||||
- Extend and improve the API documentation
|
||||
- Log warning for recipes that were registered too late
|
||||
- Update translation files
|
||||
- Add Danish translation (jeppebundsgaard)
|
||||
|
||||
#### 2025-07-25
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- techage:
|
||||
- Fix misspelled words (ghost)
|
||||
- Fix the recipe output name for aluminum handrail recipe (jfanjoy)
|
||||
- Add CRT monitor
|
||||
- TA4 Furnace Heater listed wrong on TA3 Power Terminal
|
||||
- Add TA4 displays
|
||||
- Update spelling of German manuals (mineplayer)
|
||||
- Revise Lua controller
|
||||
- Fixes gravel ore probability when using the everness mod (acarrico)
|
||||
- Add a recipe to convert iron ingot to steel using the industrial furnace (jfanjoy)
|
||||
- Add move2 command from move controller to fly controller (jfanjoy)
|
||||
- Add new movecontroller2
|
||||
- Fix bug with values and junctions behind the ta4_reactor
|
||||
- Add ta1 iron block recipes and texture (jfanjoy)
|
||||
- Improve Lua controller formspec
|
||||
- Add NanoBasic daytime functions
|
||||
- Add reset command to fly controller (jfanjoy)
|
||||
- Improve movecontroller2
|
||||
- Improve doorcontroller2
|
||||
- Fix #199 (Everness gravel sieve not working)
|
||||
- Add observation window block
|
||||
- Adds nitrogen, ammonia, tnt chemistry (Evgeniy)
|
||||
- Add French translation (François Delpierre)
|
||||
- TA4 Doser: Fix farming:salt recipe
|
||||
|
||||
- safer_lua:
|
||||
- Add feature to control runtime via credits
|
||||
|
||||
- signs_bot:
|
||||
- Fix command crash when running "print <num>" (Niklp09)
|
||||
- Add support for shop mod
|
||||
- Fix bot command and status bugs
|
||||
- Add support for shop mod
|
||||
- Filling of bot slots improved
|
||||
- Prevent the AND gate from accepting a signal while the bot is running
|
||||
- Falling nodes don't fall when placed by signs bot
|
||||
|
||||
- stamina:
|
||||
- Fix Deprecated 'hud_elem_type' field warning
|
||||
- Merge changes from minetest-mods/stamina
|
||||
|
||||
- nanobasic:
|
||||
- Chance trace mode
|
||||
- Improve compiler
|
||||
- Add SGN function
|
||||
- Add ELSEIF statement
|
||||
|
||||
- lcdlib:
|
||||
- Fix bug when placeing wallmounted displays
|
||||
|
||||
#### 2025-01-27
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- nanobasic:
|
||||
- Allow to run techage without proper installation of nanobasic
|
||||
|
||||
#### 2025-01-24
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- techage:
|
||||
- Add Traffic Lights and accessories
|
||||
- Add TA4 water remover device
|
||||
- Improve door and fly controller
|
||||
- Fix several issues
|
||||
- Add Everness support #187 (ore sieving)
|
||||
- Add BASIC mode to TA3 terminal (requires to install nanobasic. See: mods/techage_modpack/nanobasic/README.md)
|
||||
- Improve russian translation (z-op)
|
||||
- Many bug fixes by Niklp09, joe7575, and others
|
||||
- Add pre-assignment menu to the furnace
|
||||
- Improve recording for move/fly/turn controllers
|
||||
- Allow to move the TA4 terminal with the assembly tool
|
||||
- Add aluminum recipes for techpack_stairway items (jfanjoy)
|
||||
- Change forceload block menu
|
||||
- signs_bot:
|
||||
- Support `ethereal` and `moretrees` saplings (Niklp09)
|
||||
- minecart:
|
||||
- Try to fix rare carts sound playing to all users (Niklp09)
|
||||
- unified_inventory:
|
||||
- See: https://github.com/minetest-mods/unified_inventory/commits/master/
|
||||
- nanobasic:
|
||||
- Newly added
|
||||
|
||||
#### 2024-08-25
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- techage:
|
||||
- Fix bug 'TA2 boiler work without requiring boiler'
|
||||
- Improve move/fly controller
|
||||
- Add replacement to electricmeter recipe (Eternal-Study)
|
||||
- Fix injector bug
|
||||
- Fix flowers detection when using ethereal (Niklp09)
|
||||
- Fix issue #175 (TA3 Furnace Does not implement replacements in recipes)
|
||||
- Water to Salt + River Water Recipe, add Salt.lua (Eternal-Study)
|
||||
- Add new button commands
|
||||
- Fix bug with injector with a full 8x2000 chest
|
||||
- Fix forceload block formspec list (Niklp09)
|
||||
- Improve techage:ta4_power_box node_box (Niklp09)
|
||||
- Allow to move the TA4 terminal with the assembly tool (#165)
|
||||
- add aluminum recipes for techpack_stairway items (jfanjoy)
|
||||
- Replace techage_invisible.png w/ engine provided blank.png (Niklp09)
|
||||
- adds a new chat command and column to forceload formspec (jfanjoy)
|
||||
- Fix bug #24 (Energy Storage respawn red gravel infinit)
|
||||
- Allow TA3 screwdriver to get repaired by anvil (Niklp09)
|
||||
- Add translations and fix bug with growlight
|
||||
- Add manual for pt-BR language (hephaestus-br)
|
||||
- Add reverse mode for ta5 pump
|
||||
- Fix assembly tool bug with non-empty chests
|
||||
- hyperloop:
|
||||
- add luacheck workflow
|
||||
- Change code so that no luacheck warnings are issued
|
||||
- Fix set_look_horizontal bug
|
||||
- Prevent 'deprecated warnings'
|
||||
- signs_bot:
|
||||
- Fix to Fall_Down when non-walkable nodes are in path (Eternal-Study)
|
||||
- Fix to fall_down (Eternal-Study)
|
||||
- hold aux1 to invert signal (blaboing)
|
||||
- Fix flowers detection when using ethereal (Niklp09)
|
||||
- Fix bug #38 (Colon in print command breaks jumps)
|
||||
- tubelib2:
|
||||
- Replace deprecated meta:set_string(*, nil) calls (Niklp09)
|
||||
- lcdlib:
|
||||
- Use initial_properties for text entity (Niklp09)
|
||||
- safer_lua:
|
||||
- Add safe variants for string.rep() and string.find()
|
||||
|
||||
#### 2023-11-26
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- tubelib2:
|
||||
- Improve pipe/tube placement
|
||||
- doclib:
|
||||
- Add a NIL check to prevent crashes
|
||||
- minecart:
|
||||
- Replace some global_exists by get_modpath
|
||||
- Fix crash when using techage (Niklp09)
|
||||
- techage:
|
||||
- Fix crash with collider magnets
|
||||
- basic_materials:
|
||||
- Update to current version
|
||||
|
||||
#### 2023-11-05
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- techage v1.18:
|
||||
- see readme.md
|
||||
- ta4_jetpack:
|
||||
- Fix translation issue
|
||||
- minecart:
|
||||
- Fix bug with missing techage mod
|
||||
- signs_bot:
|
||||
- Fix bug #36 (pattern/copy 5x3 is off center)
|
||||
- Adapt bot box for techage assembly tool
|
||||
- Escape equal sign in german translation (Niklp09)
|
||||
- autobahn:
|
||||
- Add support for player_monoids (Niklp09)
|
||||
- compost:
|
||||
- User proper player creative check (Niklp09)
|
||||
- Fix drop bug
|
||||
- techpack_stairway:
|
||||
- Add stairways without handrails
|
||||
- networks:
|
||||
- Add support for colored nodes by unifieddyes
|
||||
- Improve debugging tool
|
||||
|
||||
#### 2023-08-25
|
||||
|
||||
**The mod doclib is a new hard dependency !**
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- techage v1.17:
|
||||
- see readme.md
|
||||
- autobahn:
|
||||
- Make motor sound mono (Niklp09)
|
||||
- lcdlib v1.02:
|
||||
- see readme.md
|
||||
- signs_bot v1.13:
|
||||
- see readme.md
|
||||
- minecart v2.05:
|
||||
- see readme.md
|
||||
- mod 'doc' removed
|
||||
- mod 'doclib' v1.00 added
|
||||
- mod 'datastorage' removed
|
||||
|
||||
#### 2023-05-09
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- techage v1.15:
|
||||
- see readme.md
|
||||
- hyperloop:
|
||||
- Remove intlib support
|
||||
|
||||
#### 2023-03-05
|
||||
|
||||
Updated Mods:
|
||||
- techage v1.11:
|
||||
- see readme.md
|
||||
- signs_bot v1.12:
|
||||
- Add bot command 'set_param2'
|
||||
- minecart v2.04:
|
||||
- New API functions added
|
||||
- EOL blanks removed
|
||||
- hyperloop:
|
||||
- Fix some bugs
|
||||
- networks v0.13:
|
||||
- New API function networks.power.get_storage_percent added
|
||||
- autobahn:
|
||||
- fix reset_player_privs bug
|
||||
- basic_materials:
|
||||
- Switched back to tag "2021-01-30"
|
||||
|
||||
#### 2023-02-04
|
||||
|
||||
Updated Mods:
|
||||
- techage:
|
||||
- V1.10 (see readme.md)
|
||||
- signs_bot:
|
||||
- Fix fall_down on rail bug
|
||||
- minecart:
|
||||
- hyperloop:
|
||||
- Fix some bugs
|
||||
|
||||
#### 2022-12-31
|
||||
|
||||
Updated Mods:
|
||||
- techage:
|
||||
- Add wafer recipe with 'mesecons_materials:silicon'
|
||||
- Add TA5 AI Chip II to the manual
|
||||
- Fix movecontroller wrench menu bug
|
||||
- Improve chemical reactor description
|
||||
- Improve player detector wrench menu
|
||||
- Fix 'count' command bug: default value is 0 again
|
||||
- Movecontroller: Allow moving blocks through unloaded areas
|
||||
- Player detector: Add wrench menu to configure search radius
|
||||
- Movecontroller: Place unloaded flying blocks to dest pos
|
||||
- Furnace: Don't use items filled from the top as fuel
|
||||
- Manual improvements for the move controller
|
||||
- Make a use for cotton seeds #104
|
||||
- Merge pull request #102 from Niklp09/mvps2
|
||||
- Fix broken mesecons detection
|
||||
- Fix bug with TA1 hammer used by pipeworks nodebreaker
|
||||
- Merge pull request #99 from Niklp09/mvps
|
||||
- Register mvps stopper for complex techage nodes
|
||||
- Merge pull request #98 from Niklp09/glow_gravel
|
||||
- Fix hammer bauxite bug
|
||||
- Fix mesecons_materials bug
|
||||
- Add cracking recipe for isobutane
|
||||
- Merge pull request #96 from Niklp09/ethereal
|
||||
- Grind ethereal leaves to leave powder
|
||||
- Improve manual, fix bug in electrolyzer menu description
|
||||
- networks (Add API function used by the techage tool)
|
||||
- safer_lua (Limit code execution time for recursive function calls (#3 by Thomas--S))
|
||||
- tubelib2:
|
||||
- Merge pull request #18 from IFRFSX/cn
|
||||
- Add chinese translation
|
||||
- Merge pull request #17 from Niklp09/master
|
||||
- Fix minor translation issue
|
||||
- signs_bot:
|
||||
- Fix stop command bug
|
||||
- Fix #23 (Water is moved up when a bot builds upward from under water)
|
||||
- Fix bug remove foot after move_up command
|
||||
- hyperloop (Fix elevator area protection bug)
|
||||
|
||||
#### 2022-09-24
|
||||
|
||||
Updated Mods:
|
||||
- techage (fix database backend bug, further bugfixes and improvements)
|
||||
- lcdlib (fix MT5.5+ "deprecated" warnings)
|
||||
- signs_bot (add new commands)
|
||||
- networks (add 'networks.liquid.get_liquids')
|
||||
- ta4_paraglider (Fix bug "Add nil player check in paraglider")
|
||||
- unified_inventory (Add support for colored items (#213))
|
||||
|
||||
#### 2022-08-17
|
||||
|
||||
Updated Mods:
|
||||
- techage (fix "Invalid field use_texture_alpha" errors)
|
||||
|
||||
|
||||
#### 2022-08-06
|
||||
|
||||
Updated Mods:
|
||||
- autobahn (fix MT5.5+ "deprecated" warnings)
|
||||
- compost (fix MT5.5+ "deprecated" warnings)
|
||||
- hyperloop (fix MT5.5+ "deprecated" warnings, add french translation)
|
||||
- tubelib2 (fix MT5.5+ "deprecated" warnings)
|
||||
- networks (Add improvement for liquid handling)
|
||||
- signs_bot (fix MT5.5+ "deprecated" warnings)
|
||||
- minecart (fix MT5.5+ "deprecated" warnings)
|
||||
- safer_lua (fix MT5.5+ "deprecated" warnings)
|
||||
- techpack_stairway (fix MT5.5+ "deprecated" warnings)
|
||||
- techage (many improvements, see: https://github.com/joe7575/techage/commits/master)
|
||||
- ta4_jetpack (Fix the 3d_armor _material issue)
|
||||
- datastorage (fix MT5.5+ "deprecated" warnings)
|
||||
- stamina (fix MT5.5+ "deprecated" warnings)
|
||||
|
||||
|
||||
#### 2022-07-11
|
||||
|
||||
Updated Mods:
|
||||
- techage V1.08 with improvements and bug fixes
|
||||
- signs_bot
|
||||
- tubelib2
|
||||
- unified_inventory
|
||||
- lcdlib
|
||||
|
||||
#### 2022-01-28
|
||||
|
||||
Updated Mods:
|
||||
- techage (fusion reactor added)
|
||||
|
||||
|
||||
#### 2022-01-04
|
||||
|
||||
Updated Mods:
|
||||
- techage (bugfixes)
|
||||
|
||||
|
||||
#### 2022-01-03
|
||||
|
||||
Updated Mods:
|
||||
- techage (see readme)
|
||||
- hyperloop (see readme)
|
||||
- minecart (bugfix)
|
||||
- unified_inventory (see readme)
|
||||
- ta4_addons (see readme)
|
||||
|
||||
|
||||
#### 2021-10-30
|
||||
|
||||
Updated Mods:
|
||||
- techage (see readme)
|
||||
- signs_bot (see readme)
|
||||
- minecart (bugfix)
|
||||
- lcdlib (improvement)
|
||||
|
||||
|
||||
#### 2021-09-18
|
||||
|
||||
Updated Mods:
|
||||
- techage (see readme)
|
||||
- signs_bot (see readme)
|
||||
- networks (see readme)
|
||||
- ta4_addons (add matrix screen)
|
||||
|
||||
|
||||
#### 2021-09-04
|
||||
|
||||
Updated Mods:
|
||||
- minecart (bugfix)
|
||||
|
||||
|
||||
#### 2021-09-03
|
||||
|
||||
Updated Mods:
|
||||
- techage (bugfixes)
|
||||
- minecart (see readme)
|
||||
- signs_bot (see readme)
|
||||
|
||||
|
||||
#### 2021-08-19
|
||||
|
||||
Changed Mods:
|
||||
- techage (see readme and constuction board)
|
||||
|
||||
Updated Mods:
|
||||
- minecart
|
||||
|
||||
|
||||
#### 2021-08-01
|
||||
|
||||
Newly added mods (must be activated!):
|
||||
- networks
|
||||
- ta4_addons (Touchscreen)
|
||||
|
||||
Changed Mods:
|
||||
- techage (see readme and constuction board)
|
||||
- minecart (see readme "Migration to v2")
|
||||
|
||||
Updated Mods:
|
||||
- autobahn
|
||||
- signs_bot
|
||||
- hyperloop
|
||||
- ta4_jetpack
|
||||
|
||||
|
||||
#### 2021-05-14
|
||||
|
||||
Updated Mods:
|
||||
- compost
|
||||
- minecart
|
||||
- signs_bot
|
||||
- techage
|
||||
- towercrane
|
||||
- unified_inventory
|
||||
|
||||
|
||||
#### 2021-02-07
|
||||
|
||||
Updated Mods:
|
||||
- basic_materials
|
||||
- compost
|
||||
- hyperloop
|
||||
- minecart
|
||||
- signs_bot
|
||||
- ta4_paraglider
|
||||
- techage
|
||||
- towercrane
|
||||
- tubelib2
|
||||
- unified_inventory
|
||||
|
||||
|
||||
#### 2020-12-11
|
||||
|
||||
Updated Mods:
|
||||
- autobahn
|
||||
- basic_materials
|
||||
- minecart
|
||||
- techage v0.25
|
||||
- ta4_jetpack
|
||||
- tubelib2
|
||||
|
||||
|
||||
#### 2020-10-25
|
||||
|
||||
Updated Mods:
|
||||
- techage v0.24
|
||||
- signs_bot
|
||||
- minecart
|
||||
- techpack_stairway
|
||||
- stamina
|
||||
|
||||
ta4_paraglider newly added
|
||||
|
||||
|
||||
#### 2020-09-13
|
||||
|
||||
Updated Mods:
|
||||
|
||||
- techage v0.23
|
||||
- signs_bot
|
||||
- minecart
|
||||
|
||||
|
||||
#### 2020-08-08
|
||||
|
||||
Updated Mods:
|
||||
- autobahn
|
||||
- compost
|
||||
- hyperloop
|
||||
- lcdlib
|
||||
- minecart
|
||||
- safer_lua
|
||||
- signs_bot
|
||||
- techage v0.21
|
||||
|
||||
|
||||
#### 2020-07-21
|
||||
|
||||
Updated Mods:
|
||||
- signs_bot
|
||||
- techage v0.18
|
||||
- towercrane
|
||||
- unified_inventory
|
||||
- basic_materials
|
||||
|
||||
#### 2020-07-02
|
||||
Updates (see local readme files):
|
||||
- mod 3d_armor removed again (please install separately)
|
||||
- techage v0.15 improvements and bugfixes
|
||||
- autobahn v0.04 improvements
|
||||
|
||||
#### 2020-06-29
|
||||
|
||||
Updates (see local readme files):
|
||||
- autobahn, towercrane, ta4_jetpack, 3d_armor, and stamina now use a common player physics lockout mechanism
|
||||
- the new mod ta4_jetpack added
|
||||
- mod stamina added (adapted to the player physics lockout mechanism)
|
||||
- mod 3d_armor added (needed for ta4_jetpack, adapted to the player physics lockout mechanism)
|
||||
- minecart v1.07 with many improvements
|
||||
- techage v0.14 with many improvements
|
||||
- hyperloop v2.06 update
|
||||
- autobahn update
|
||||
|
||||
|
||||
#### 2020-06-21
|
||||
|
||||
Updates (see local readme files):
|
||||
- signs_bot v1.03
|
||||
- techage v0.13
|
||||
- hyperloop v2.06
|
||||
|
||||
|
||||
#### 2020-06-18
|
||||
|
||||
- techage v0.12
|
||||
- cart commands added for both controllers
|
||||
- support for moreores added
|
||||
- Ethereal support added, manual correction
|
||||
- tin ingot recipe bugfix
|
||||
|
||||
- minecart v1.06
|
||||
|
||||
- API changed and chat command added
|
||||
|
||||
- signs_bot v1.02
|
||||
- some bugfixes
|
||||
|
||||
|
||||
|
||||
#### 2020-06-04
|
||||
|
||||
- techage v0.10
|
||||
- minor changes and bugfixes
|
||||
- stone hammer added
|
||||
- quarry 'depth' command added
|
||||
- manuals adapted
|
||||
- QSG added
|
||||
|
||||
#### 2020-05-31
|
||||
|
||||
- first commit
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
The autobahn mod for Minetest is
|
||||
|
||||
Copyright (C) 2019-2020 Joachim Stolberg
|
||||
|
||||
License of source code
|
||||
----------------------
|
||||
|
||||
This mod is free software; you can redistribute and/or
|
||||
modify it under the terms of the GNU General Public License version 3 or later
|
||||
published by the Free Software Foundation.
|
||||
|
||||
This mod is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public
|
||||
License along with this mod; if not, write to the
|
||||
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
||||
Boston, MA 02110-1301, USA.
|
||||
|
||||
|
||||
License of media (textures, sounds and documentation)
|
||||
-----------------------------------------------------
|
||||
|
||||
All textures, sounds and documentation files are licensed under the
|
||||
Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0)
|
||||
http://creativecommons.org/licenses/by-sa/3.0/
|
||||
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU General Public License is a free, copyleft license for
|
||||
software and other kinds of works.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
the GNU General Public License is intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users. We, the Free Software Foundation, use the
|
||||
GNU General Public License for most of our software; it applies also to
|
||||
any other work released this way by its authors. You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to prevent others from denying you
|
||||
these rights or asking you to surrender the rights. Therefore, you have
|
||||
certain responsibilities if you distribute copies of the software, or if
|
||||
you modify it: responsibilities to respect the freedom of others.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must pass on to the recipients the same
|
||||
freedoms that you received. You must make sure that they, too, receive
|
||||
or can get the source code. And you must show them these terms so they
|
||||
know their rights.
|
||||
|
||||
Developers that use the GNU GPL protect your rights with two steps:
|
||||
(1) assert copyright on the software, and (2) offer you this License
|
||||
giving you legal permission to copy, distribute and/or modify it.
|
||||
|
||||
For the developers' and authors' protection, the GPL clearly explains
|
||||
that there is no warranty for this free software. For both users' and
|
||||
authors' sake, the GPL requires that modified versions be marked as
|
||||
changed, so that their problems will not be attributed erroneously to
|
||||
authors of previous versions.
|
||||
|
||||
Some devices are designed to deny users access to install or run
|
||||
modified versions of the software inside them, although the manufacturer
|
||||
can do so. This is fundamentally incompatible with the aim of
|
||||
protecting users' freedom to change the software. The systematic
|
||||
pattern of such abuse occurs in the area of products for individuals to
|
||||
use, which is precisely where it is most unacceptable. Therefore, we
|
||||
have designed this version of the GPL to prohibit the practice for those
|
||||
products. If such problems arise substantially in other domains, we
|
||||
stand ready to extend this provision to those domains in future versions
|
||||
of the GPL, as needed to protect the freedom of users.
|
||||
|
||||
Finally, every program is threatened constantly by software patents.
|
||||
States should not allow patents to restrict development and use of
|
||||
software on general-purpose computers, but in those that do, we wish to
|
||||
avoid the special danger that patents applied to a free program could
|
||||
make it effectively proprietary. To prevent this, the GPL assures that
|
||||
patents cannot be used to render the program non-free.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Use with the GNU Affero General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU Affero General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the special requirements of the GNU Affero General Public License,
|
||||
section 13, concerning interaction through a network will apply to the
|
||||
combination as such.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program does terminal interaction, make it output a short
|
||||
notice like this when it starts in an interactive mode:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, your program's commands
|
||||
might be different; for a GUI interface, you would use an "about box".
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU GPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
The GNU General Public License does not permit incorporating your program
|
||||
into proprietary programs. If your program is a subroutine library, you
|
||||
may consider it more useful to permit linking proprietary applications with
|
||||
the library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License. But first, please read
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Autobahn Mod
|
||||
|
||||
Street blocks with stripes and slope blocks. Allows faster traveling.
|
||||
For the recipe bitumen or tar is needed from the mods techage or moreblocks.
|
||||
|
||||

|
||||
|
||||
## Dependencies
|
||||
default
|
||||
Optional: moreblocks, techage, minecart
|
||||
|
||||
# License
|
||||
Copyright (C) 2017-2021 Joachim Stolberg
|
||||
Code: Licensed under the GNU GPL version 3 or later. See LICENSE.txt
|
||||
Textures: CC BY-SA 3.0
|
||||
|
||||
|
||||
@@ -0,0 +1,456 @@
|
||||
--[[
|
||||
|
||||
Autobahn
|
||||
|
||||
Copyright (C) 2017-2021 Joachim Stolberg
|
||||
GPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
History:
|
||||
2017-11-11 v0.01 first version
|
||||
2019-09-13 v0.02 adapted to 5.0.0
|
||||
2020-03-19 v0.03 recipe added for techage bitumen
|
||||
2020-07-02 v0.04 further slope nodes added
|
||||
|
||||
]]--
|
||||
local S = minetest.get_translator("autobahn")
|
||||
local mod_player_monoids = minetest.get_modpath("player_monoids")
|
||||
|
||||
autobahn = {}
|
||||
|
||||
-- Test for MT 5.4 new string mode
|
||||
autobahn.CLIP = minetest.features.use_texture_alpha_string_modes and "clip" or true
|
||||
|
||||
local Facedir2Dir = {[0] =
|
||||
{x=0, y=0, z=1},
|
||||
{x=1, y=0, z=0},
|
||||
{x=0, y=0, z=-1},
|
||||
{x=-1, y=0, z=0},
|
||||
}
|
||||
|
||||
-- To prevent race condition crashes
|
||||
local Currently_left_the_game = {}
|
||||
|
||||
local function is_active(player)
|
||||
local pl_meta = player:get_meta()
|
||||
if not pl_meta or pl_meta:get_int("autobahn_isactive") ~= 1 then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local function set_player_privs(player)
|
||||
local meta = player:get_meta()
|
||||
-- Check access conflicts with other mods
|
||||
if meta:get_int("player_physics_locked") == 0 then
|
||||
meta:set_int("player_physics_locked", 1)
|
||||
if mod_player_monoids then
|
||||
player_monoids.speed:add_change(player, 3.5, "autobahn:speed")
|
||||
else
|
||||
local physics = player:get_physics_override()
|
||||
-- store the player privs default values
|
||||
meta:set_float("autobahn_speed", physics.speed)
|
||||
physics.speed = 3.5
|
||||
-- write back
|
||||
player:set_physics_override(physics)
|
||||
end
|
||||
-- set operator privs
|
||||
meta:set_int("autobahn_isactive", 1)
|
||||
minetest.sound_play("autobahn_motor", {
|
||||
pos = player:get_pos(),
|
||||
gain = 0.5,
|
||||
max_hear_distance = 5,
|
||||
})
|
||||
end
|
||||
end
|
||||
|
||||
local function reset_player_privs(player)
|
||||
local meta = player:get_meta()
|
||||
-- restore the player privs default values
|
||||
meta:set_int("autobahn_isactive", 0)
|
||||
if mod_player_monoids then
|
||||
player_monoids.speed:del_change(player, "autobahn:speed")
|
||||
else
|
||||
local physics = player:get_physics_override()
|
||||
physics.speed = meta:get_float("autobahn_speed")
|
||||
if physics.speed == 0 then physics.speed = 1 end
|
||||
-- delete stored default values
|
||||
meta:set_string("autobahn_speed", "")
|
||||
-- write back
|
||||
player:set_physics_override(physics)
|
||||
end
|
||||
meta:set_int("player_physics_locked", 0)
|
||||
end
|
||||
|
||||
minetest.register_on_joinplayer(function(player)
|
||||
if is_active(player) then
|
||||
reset_player_privs(player)
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_leaveplayer(function(player)
|
||||
if is_active(player) then
|
||||
Currently_left_the_game[player:get_player_name()] = true
|
||||
end
|
||||
end)
|
||||
|
||||
minetest.register_on_respawnplayer(function(player)
|
||||
if is_active(player) then
|
||||
reset_player_privs(player)
|
||||
end
|
||||
end)
|
||||
|
||||
local function control_player(player_name)
|
||||
if Currently_left_the_game[player_name] then
|
||||
Currently_left_the_game[player_name] = nil
|
||||
return
|
||||
end
|
||||
local player = minetest.get_player_by_name(player_name)
|
||||
if player then
|
||||
local pos = player:get_pos()
|
||||
if pos then
|
||||
pos.y = math.floor(pos.y)
|
||||
local node = minetest.get_node(pos)
|
||||
if string.sub(node.name,1,13) == "autobahn:node" then
|
||||
minetest.after(0.5, control_player, player_name)
|
||||
else
|
||||
pos.y = pos.y - 1
|
||||
node = minetest.get_node(pos)
|
||||
if string.sub(node.name,1,13) == "autobahn:node" then
|
||||
minetest.after(0.5, control_player, player_name)
|
||||
else
|
||||
pos.y = pos.y + 2
|
||||
node = minetest.get_node(pos)
|
||||
if string.sub(node.name,1,13) == "autobahn:node" then
|
||||
minetest.after(0.5, control_player, player_name)
|
||||
else
|
||||
reset_player_privs(player)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local NodeTbl1 = {
|
||||
["autobahn:node1"] = true,
|
||||
["autobahn:node2"] = true,
|
||||
["autobahn:node3"] = true,
|
||||
["autobahn:node4"] = true,
|
||||
["autobahn:node5"] = true,
|
||||
["autobahn:node6"] = true,
|
||||
["autobahn:node12"] = true,
|
||||
["autobahn:node22"] = true,
|
||||
["autobahn:node32"] = true,
|
||||
["autobahn:node42"] = true,
|
||||
["autobahn:node52"] = true,
|
||||
["autobahn:node62"] = true,
|
||||
}
|
||||
local NodeTbl2 = {
|
||||
["autobahn:node11"] = true,
|
||||
["autobahn:node21"] = true,
|
||||
["autobahn:node31"] = true,
|
||||
["autobahn:node41"] = true,
|
||||
["autobahn:node51"] = true,
|
||||
["autobahn:node61"] = true,
|
||||
}
|
||||
local NodeTbl3 = {
|
||||
["autobahn:node1"] = true,
|
||||
["autobahn:node2"] = true,
|
||||
["autobahn:node3"] = true,
|
||||
["autobahn:node4"] = true,
|
||||
["autobahn:node5"] = true,
|
||||
["autobahn:node6"] = true,
|
||||
}
|
||||
|
||||
-- 1) _o_
|
||||
-- /\ [?] ==> 1
|
||||
-- [T][T][S][S][S] T..tar
|
||||
-- [S][S][S][S][S] S..sand
|
||||
--
|
||||
--
|
||||
-- 2) _o_
|
||||
-- /\ [1][?] ==> 2
|
||||
-- [T][T][S][S][S]
|
||||
-- [S][S][S][S][S]
|
||||
--
|
||||
--
|
||||
-- 3) _o_
|
||||
-- /\ [?] ==> 1
|
||||
-- [S][S][S][T][T]
|
||||
-- [S][S][S][S][S]
|
||||
--
|
||||
--
|
||||
-- 4) _o_
|
||||
-- /\ [?][1] ==> 2
|
||||
-- [S][S][S][T][T]
|
||||
-- [S][S][S][S][S]
|
||||
|
||||
local function update_node(pos)
|
||||
local node = minetest.get_node(pos)
|
||||
local nnode
|
||||
local npos
|
||||
-- check case 1
|
||||
local facedir = (2 + node.param2) % 4
|
||||
npos = vector.add(pos, Facedir2Dir[facedir])
|
||||
npos.y = npos.y - 1
|
||||
nnode = minetest.get_node(npos)
|
||||
if NodeTbl1[nnode.name] and NodeTbl3[node.name] then
|
||||
node.name = node.name .. "1"
|
||||
if minetest.registered_nodes[node.name] then
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
return
|
||||
end
|
||||
-- check case 2
|
||||
npos.y = npos.y + 1
|
||||
nnode = minetest.get_node(npos)
|
||||
if NodeTbl2[nnode.name] then
|
||||
node.name = string.sub(node.name,1,-1) .. "2"
|
||||
if minetest.registered_nodes[node.name] then
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
return
|
||||
end
|
||||
-- check case 3
|
||||
facedir = (0 + node.param2) % 4
|
||||
npos = vector.add(pos, Facedir2Dir[facedir])
|
||||
npos.y = npos.y - 1
|
||||
nnode = minetest.get_node(npos)
|
||||
if NodeTbl1[nnode.name] and NodeTbl3[node.name] then
|
||||
node.name = node.name .. "1"
|
||||
node.param2 = 3
|
||||
if minetest.registered_nodes[node.name] then
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
return
|
||||
end
|
||||
-- check case 4
|
||||
npos.y = npos.y + 1
|
||||
nnode = minetest.get_node(npos)
|
||||
if NodeTbl2[nnode.name] then
|
||||
node.name = string.sub(node.name,1,-1) .. "2"
|
||||
node.param2 = 3
|
||||
if minetest.registered_nodes[node.name] then
|
||||
minetest.swap_node(pos, node)
|
||||
end
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local function register_node(name, tiles, drawtype, mesh, box, drop)
|
||||
minetest.register_node("autobahn:"..name, {
|
||||
description = S("Autobahn"),
|
||||
tiles = tiles,
|
||||
drawtype = drawtype,
|
||||
mesh = mesh,
|
||||
selection_box = box,
|
||||
collision_box = box,
|
||||
paramtype = "light",
|
||||
paramtype2 = "facedir",
|
||||
sunlight_propagates = true,
|
||||
use_texture_alpha = autobahn.CLIP,
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
is_ground_content = false,
|
||||
groups = {cracky=2, crumbly=2,
|
||||
fall_damage_add_percent = -80,
|
||||
not_in_creative_inventory=(mesh==nil) and 0 or 1},
|
||||
drop = "autobahn:"..drop,
|
||||
|
||||
after_place_node = function(pos, placer, itemstack, pointed_thing)
|
||||
update_node(pos)
|
||||
end,
|
||||
|
||||
on_rightclick = function(pos, node, clicker)
|
||||
if is_active(clicker) then
|
||||
reset_player_privs(clicker)
|
||||
else
|
||||
set_player_privs(clicker)
|
||||
local player_name = clicker:get_player_name()
|
||||
minetest.after(0.5, control_player, player_name)
|
||||
end
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
local sb1 = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, -0.375, 0.5},
|
||||
{-0.5, -0.375, -0.25, 0.5, -0.25, 0.5},
|
||||
{-0.5, -0.25, 0, 0.5, -0.125, 0.5},
|
||||
{-0.5, -0.125, 0.25, 0.5, 0, 0.5},
|
||||
}
|
||||
}
|
||||
local sb2 = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{-0.5, -0.5, -0.5, 0.5, 0.125, 0.5},
|
||||
{-0.5, 0.125, -0.25, 0.5, 0.25, 0.5},
|
||||
{-0.5, 0.25, 0, 0.5, 0.375, 0.5},
|
||||
{-0.5, 0.375, 0.25, 0.5, 0.5, 0.5},
|
||||
}
|
||||
}
|
||||
|
||||
local Nodes = {
|
||||
{name="node1", tiles={"autobahn1.png"}, drawtype="normal", mesh=nil, box=nil, drop="node1"},
|
||||
{name="node2", tiles={"autobahn2.png","autobahn1.png"}, drawtype="normal", mesh=nil, box=nil, drop="node2"},
|
||||
{name="node3", tiles={"autobahn3.png","autobahn1.png"}, drawtype="normal", mesh=nil, box=nil, drop="node3"},
|
||||
{name="node4", tiles={"autobahn2.png^[transformR180]","autobahn1.png"}, drawtype="normal", mesh=nil, box=nil, drop="node4"},
|
||||
{name="node5", tiles={"autobahn4.png^[transformR90]","autobahn1.png"}, drawtype="normal", mesh=nil, box=nil, drop="node5"},
|
||||
{name="node6", tiles={"autobahn5.png^[transformR90]","autobahn1.png"}, drawtype="normal", mesh=nil, box=nil, drop="node6"},
|
||||
|
||||
{name="node11", tiles={"autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp1.obj", box=sb1, drop="node1"},
|
||||
{name="node21", tiles={"autobahn2.png","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp1.obj", box=sb1, drop="node2"},
|
||||
{name="node31", tiles={"autobahn3.png","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp1.obj", box=sb1, drop="node3"},
|
||||
{name="node41", tiles={"autobahn2.png^[transformR180]","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp1.obj", box=sb1, drop="node4"},
|
||||
{name="node51", tiles={"autobahn4.png^[transformR90]","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp1.obj", box=sb1, drop="node5"},
|
||||
{name="node61", tiles={"autobahn5.png^[transformR90]","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp1.obj", box=sb1, drop="node6"},
|
||||
|
||||
{name="node12", tiles={"autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp2.obj", box=sb2, drop="node1"},
|
||||
{name="node22", tiles={"autobahn2.png","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp2.obj", box=sb2, drop="node2"},
|
||||
{name="node32", tiles={"autobahn3.png","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp2.obj", box=sb2, drop="node3"},
|
||||
{name="node42", tiles={"autobahn2.png^[transformR180]","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp2.obj", box=sb2, drop="node4"},
|
||||
{name="node52", tiles={"autobahn4.png^[transformR90]","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp2.obj", box=sb2, drop="node5"},
|
||||
{name="node62", tiles={"autobahn5.png^[transformR90]","autobahn1.png"}, drawtype="mesh", mesh="autobahn_ramp2.obj", box=sb2, drop="node6"},
|
||||
}
|
||||
|
||||
for _,item in ipairs(Nodes) do
|
||||
register_node(item.name, item.tiles, item.drawtype, item.mesh, item.box, item.drop)
|
||||
end
|
||||
|
||||
|
||||
minetest.register_craftitem("autobahn:stripes", {
|
||||
description = S("Autobahn Stripe"),
|
||||
inventory_image = 'autobahn_stripes.png',
|
||||
})
|
||||
|
||||
|
||||
if minetest.global_exists("techage") then
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node1 12",
|
||||
recipe = {
|
||||
{"techage:sieved_basalt_gravel", "techage:sieved_basalt_gravel", "techage:sieved_basalt_gravel"},
|
||||
{"techage:sieved_basalt_gravel", "techage:ta3_barrel_bitumen", "techage:sieved_basalt_gravel"},
|
||||
{"techage:sieved_basalt_gravel", "techage:sieved_basalt_gravel", "techage:sieved_basalt_gravel"},
|
||||
},
|
||||
replacements = {{"techage:ta3_barrel_bitumen", "techage:ta3_barrel_empty"}},
|
||||
})
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node1 12",
|
||||
recipe = {
|
||||
{"techage:sieved_gravel", "techage:sieved_gravel", "techage:sieved_gravel"},
|
||||
{"techage:sieved_gravel", "techage:ta3_barrel_bitumen", "techage:sieved_gravel"},
|
||||
{"techage:sieved_gravel", "techage:sieved_gravel", "techage:sieved_gravel"},
|
||||
},
|
||||
replacements = {{"techage:ta3_barrel_bitumen", "techage:ta3_barrel_empty"}},
|
||||
})
|
||||
elseif minetest.global_exists("moreblocks") then
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node1 4",
|
||||
recipe = {
|
||||
{"moreblocks:tar", "moreblocks:tar"},
|
||||
{"default:cobble", "default:cobble"},
|
||||
},
|
||||
})
|
||||
else
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node1 4",
|
||||
recipe = {
|
||||
{"autobahn:tar", "autobahn:tar"},
|
||||
{"default:cobble", "default:cobble"},
|
||||
},
|
||||
})
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "autobahn:tar",
|
||||
recipe = "default:pine_tree",
|
||||
})
|
||||
minetest.register_node("autobahn:tar", {
|
||||
description = S("Tar"),
|
||||
tiles = {"autobahn1.png^[colorize:#000000:80"},
|
||||
is_ground_content = false,
|
||||
groups = {cracky = 2},
|
||||
sounds = default.node_sound_stone_defaults(),
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
output = "autobahn:stripes 8",
|
||||
recipe = {
|
||||
{"dye:white"},
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node2",
|
||||
recipe = {
|
||||
{"", "", "autobahn:stripes"},
|
||||
{"", "autobahn:node1", ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node3",
|
||||
recipe = {
|
||||
{"", "autobahn:stripes", ""},
|
||||
{"", "autobahn:node1", ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node4",
|
||||
recipe = {
|
||||
{"autobahn:stripes", "", ""},
|
||||
{"", "autobahn:node1", ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node5",
|
||||
recipe = {
|
||||
{"", "", ""},
|
||||
{"autobahn:stripes", "autobahn:node1", ""},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "autobahn:node6",
|
||||
recipe = {
|
||||
{"", "autobahn:stripes", ""},
|
||||
{"autobahn:stripes", "autobahn:node1", ""},
|
||||
}
|
||||
})
|
||||
|
||||
if minetest.global_exists("minecart") then
|
||||
minecart.register_protected_node("autobahn:node1")
|
||||
minecart.register_protected_node("autobahn:node2")
|
||||
minecart.register_protected_node("autobahn:node3")
|
||||
minecart.register_protected_node("autobahn:node4")
|
||||
minecart.register_protected_node("autobahn:node5")
|
||||
minecart.register_protected_node("autobahn:node6")
|
||||
minecart.register_protected_node("autobahn:node11")
|
||||
minecart.register_protected_node("autobahn:node21")
|
||||
minecart.register_protected_node("autobahn:node31")
|
||||
minecart.register_protected_node("autobahn:node41")
|
||||
minecart.register_protected_node("autobahn:node51")
|
||||
minecart.register_protected_node("autobahn:node61")
|
||||
minecart.register_protected_node("autobahn:node12")
|
||||
minecart.register_protected_node("autobahn:node22")
|
||||
minecart.register_protected_node("autobahn:node32")
|
||||
minecart.register_protected_node("autobahn:node42")
|
||||
minecart.register_protected_node("autobahn:node52")
|
||||
minecart.register_protected_node("autobahn:node62")
|
||||
end
|
||||
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
-- External API functions
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
-- Returns true if player is "driving" on the autobahn
|
||||
-- func autobahn.is_driving(player)
|
||||
autobahn.is_driving = is_active
|
||||
@@ -0,0 +1,5 @@
|
||||
# textdomain: autobahn
|
||||
|
||||
Autobahn=Шоссе
|
||||
Autobahn Stripe=Дорожная Разметка
|
||||
Tar=Дёготь
|
||||
@@ -0,0 +1,5 @@
|
||||
# textdomain: autobahn
|
||||
|
||||
Autobahn=
|
||||
Autobahn Stripe=
|
||||
Tar=
|
||||
@@ -0,0 +1,6 @@
|
||||
name=autobahn
|
||||
title=Autobahn
|
||||
description=Street mod for faster travelling.
|
||||
depends=default
|
||||
optional_depends=moreblocks, techage, minecart, player_monoids
|
||||
supported_games = minetest_game
|
||||
@@ -0,0 +1,56 @@
|
||||
g top
|
||||
v 0.500000 -0.000000 0.500000
|
||||
v -0.500000 -0.000000 0.500000
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vn 0.0000 0.8944 -0.4472
|
||||
s off
|
||||
f 2/1/1 1/2/1 4/3/1 3/4/1
|
||||
g bottom
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vn 0.0000 -1.0000 -0.0000
|
||||
s off
|
||||
f 6/5/2 5/6/2 7/7/2 8/8/2
|
||||
g right
|
||||
v -0.500000 -0.000000 0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
vt 1.0000 0.5000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vn -1.0000 0.0000 0.0000
|
||||
s off
|
||||
f 9/9/3 11/10/3 10/11/3
|
||||
g left
|
||||
v 0.500000 -0.000000 0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
vt 0.0000 0.5000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
s off
|
||||
f 12/12/4 13/13/4 14/14/4
|
||||
g back
|
||||
v 0.500000 -0.000000 0.500000
|
||||
v -0.500000 -0.000000 0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
vt 1.0000 0.5000
|
||||
vt 0.0000 0.5000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vn 0.0000 -0.0000 1.0000
|
||||
s off
|
||||
f 15/15/5 16/16/5 17/17/5 18/18/5
|
||||
@@ -0,0 +1,72 @@
|
||||
g top
|
||||
v -0.500000 0.500000 0.500000
|
||||
v -0.500000 0.000000 -0.500000
|
||||
v 0.500000 0.000000 -0.500000
|
||||
v 0.500000 0.500000 0.500000
|
||||
vt 1.0000 0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vn 0.0000 0.8944 -0.4472
|
||||
s off
|
||||
f 2/1/1 1/2/1 4/3/1 3/4/1
|
||||
g bottom
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
vt 1.0000 0.0000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vn 0.0000 -1.0000 -0.0000
|
||||
s off
|
||||
f 6/5/2 5/6/2 7/7/2 8/8/2
|
||||
g right
|
||||
v -0.500000 0.500000 0.500000
|
||||
v -0.500000 0.000000 -0.500000
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 0.5000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vn -1.0000 0.0000 0.0000
|
||||
s off
|
||||
f 9/9/3 10/10/3 11/11/3 12/12/3
|
||||
g left
|
||||
v 0.500000 0.000000 -0.500000
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
v 0.500000 0.500000 0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
vt 1.0000 0.5000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vn 1.0000 0.0000 0.0000
|
||||
s off
|
||||
f 13/13/4 15/14/4 16/15/4 14/16/4
|
||||
g back
|
||||
v -0.500000 0.500000 0.500000
|
||||
v -0.500000 -0.500000 0.500000
|
||||
v 0.500000 0.500000 0.500000
|
||||
v 0.500000 -0.500000 0.500000
|
||||
vt 1.0000 1.0000
|
||||
vt 0.0000 1.0000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vn 0.0000 -0.0000 1.0000
|
||||
s off
|
||||
f 19/17/5 17/18/5 18/19/5 20/20/5
|
||||
g front
|
||||
v -0.500000 0.000000 -0.500000
|
||||
v -0.500000 -0.500000 -0.500000
|
||||
v 0.500000 0.000000 -0.500000
|
||||
v 0.500000 -0.500000 -0.500000
|
||||
vt 1.0000 0.5000
|
||||
vt 0.0000 0.5000
|
||||
vt 0.0000 0.0000
|
||||
vt 1.0000 0.0000
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
s off
|
||||
f 21/21/6 23/22/6 24/23/6 22/24/6
|
||||
|
After Width: | Height: | Size: 734 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 631 B |
@@ -0,0 +1,13 @@
|
||||
name: luacheck
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@master
|
||||
- name: apt
|
||||
run: sudo apt-get install -y luarocks
|
||||
- name: luacheck install
|
||||
run: luarocks install --local luacheck
|
||||
- name: luacheck run
|
||||
run: $HOME/.luarocks/bin/luacheck ./
|
||||
@@ -0,0 +1,7 @@
|
||||
globals = {
|
||||
"minetest", "basic_materials", "crafting",
|
||||
}
|
||||
|
||||
read_globals = {
|
||||
"default", "xcompat",
|
||||
}
|
||||
@@ -0,0 +1,600 @@
|
||||
License for code: LGPL 3.0
|
||||
License for media and all other assets: CC-by-SA 4.0
|
||||
|
||||
###############################################################################
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
||||
This version of the GNU Lesser General Public License incorporates
|
||||
the terms and conditions of version 3 of the GNU General Public
|
||||
License, supplemented by the additional permissions listed below.
|
||||
|
||||
0. Additional Definitions.
|
||||
|
||||
As used herein, "this License" refers to version 3 of the GNU Lesser
|
||||
General Public License, and the "GNU GPL" refers to version 3 of the GNU
|
||||
General Public License.
|
||||
|
||||
"The Library" refers to a covered work governed by this License,
|
||||
other than an Application or a Combined Work as defined below.
|
||||
|
||||
An "Application" is any work that makes use of an interface provided
|
||||
by the Library, but which is not otherwise based on the Library.
|
||||
Defining a subclass of a class defined by the Library is deemed a mode
|
||||
of using an interface provided by the Library.
|
||||
|
||||
A "Combined Work" is a work produced by combining or linking an
|
||||
Application with the Library. The particular version of the Library
|
||||
with which the Combined Work was made is also called the "Linked
|
||||
Version".
|
||||
|
||||
The "Minimal Corresponding Source" for a Combined Work means the
|
||||
Corresponding Source for the Combined Work, excluding any source code
|
||||
for portions of the Combined Work that, considered in isolation, are
|
||||
based on the Application, and not on the Linked Version.
|
||||
|
||||
The "Corresponding Application Code" for a Combined Work means the
|
||||
object code and/or source code for the Application, including any data
|
||||
and utility programs needed for reproducing the Combined Work from the
|
||||
Application, but excluding the System Libraries of the Combined Work.
|
||||
|
||||
1. Exception to Section 3 of the GNU GPL.
|
||||
|
||||
You may convey a covered work under sections 3 and 4 of this License
|
||||
without being bound by section 3 of the GNU GPL.
|
||||
|
||||
2. Conveying Modified Versions.
|
||||
|
||||
If you modify a copy of the Library, and, in your modifications, a
|
||||
facility refers to a function or data to be supplied by an Application
|
||||
that uses the facility (other than as an argument passed when the
|
||||
facility is invoked), then you may convey a copy of the modified
|
||||
version:
|
||||
|
||||
a) under this License, provided that you make a good faith effort to
|
||||
ensure that, in the event an Application does not supply the
|
||||
function or data, the facility still operates, and performs
|
||||
whatever part of its purpose remains meaningful, or
|
||||
|
||||
b) under the GNU GPL, with none of the additional permissions of
|
||||
this License applicable to that copy.
|
||||
|
||||
3. Object Code Incorporating Material from Library Header Files.
|
||||
|
||||
The object code form of an Application may incorporate material from
|
||||
a header file that is part of the Library. You may convey such object
|
||||
code under terms of your choice, provided that, if the incorporated
|
||||
material is not limited to numerical parameters, data structure
|
||||
layouts and accessors, or small macros, inline functions and templates
|
||||
(ten or fewer lines in length), you do both of the following:
|
||||
|
||||
a) Give prominent notice with each copy of the object code that the
|
||||
Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the object code with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
4. Combined Works.
|
||||
|
||||
You may convey a Combined Work under terms of your choice that,
|
||||
taken together, effectively do not restrict modification of the
|
||||
portions of the Library contained in the Combined Work and reverse
|
||||
engineering for debugging such modifications, if you also do each of
|
||||
the following:
|
||||
|
||||
a) Give prominent notice with each copy of the Combined Work that
|
||||
the Library is used in it and that the Library and its use are
|
||||
covered by this License.
|
||||
|
||||
b) Accompany the Combined Work with a copy of the GNU GPL and this license
|
||||
document.
|
||||
|
||||
c) For a Combined Work that displays copyright notices during
|
||||
execution, include the copyright notice for the Library among
|
||||
these notices, as well as a reference directing the user to the
|
||||
copies of the GNU GPL and this license document.
|
||||
|
||||
d) Do one of the following:
|
||||
|
||||
0) Convey the Minimal Corresponding Source under the terms of this
|
||||
License, and the Corresponding Application Code in a form
|
||||
suitable for, and under terms that permit, the user to
|
||||
recombine or relink the Application with a modified version of
|
||||
the Linked Version to produce a modified Combined Work, in the
|
||||
manner specified by section 6 of the GNU GPL for conveying
|
||||
Corresponding Source.
|
||||
|
||||
1) Use a suitable shared library mechanism for linking with the
|
||||
Library. A suitable mechanism is one that (a) uses at run time
|
||||
a copy of the Library already present on the user's computer
|
||||
system, and (b) will operate properly with a modified version
|
||||
of the Library that is interface-compatible with the Linked
|
||||
Version.
|
||||
|
||||
e) Provide Installation Information, but only if you would otherwise
|
||||
be required to provide such information under section 6 of the
|
||||
GNU GPL, and only to the extent that such information is
|
||||
necessary to install and execute a modified version of the
|
||||
Combined Work produced by recombining or relinking the
|
||||
Application with a modified version of the Linked Version. (If
|
||||
you use option 4d0, the Installation Information must accompany
|
||||
the Minimal Corresponding Source and Corresponding Application
|
||||
Code. If you use option 4d1, you must provide the Installation
|
||||
Information in the manner specified by section 6 of the GNU GPL
|
||||
for conveying Corresponding Source.)
|
||||
|
||||
5. Combined Libraries.
|
||||
|
||||
You may place library facilities that are a work based on the
|
||||
Library side by side in a single library together with other library
|
||||
facilities that are not Applications and are not covered by this
|
||||
License, and convey such a combined library under terms of your
|
||||
choice, if you do both of the following:
|
||||
|
||||
a) Accompany the combined library with a copy of the same work based
|
||||
on the Library, uncombined with any other library facilities,
|
||||
conveyed under the terms of this License.
|
||||
|
||||
b) Give prominent notice with the combined library that part of it
|
||||
is a work based on the Library, and explaining where to find the
|
||||
accompanying uncombined form of the same work.
|
||||
|
||||
6. Revised Versions of the GNU Lesser General Public License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions
|
||||
of the GNU Lesser General Public License from time to time. Such new
|
||||
versions will be similar in spirit to the present version, but may
|
||||
differ in detail to address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Library as you received it specifies that a certain numbered version
|
||||
of the GNU Lesser General Public License "or any later version"
|
||||
applies to it, you have the option of following the terms and
|
||||
conditions either of that published version or of any later version
|
||||
published by the Free Software Foundation. If the Library as you
|
||||
received it does not specify a version number of the GNU Lesser
|
||||
General Public License, you may choose any version of the GNU Lesser
|
||||
General Public License ever published by the Free Software Foundation.
|
||||
|
||||
If the Library as you received it specifies that a proxy can decide
|
||||
whether future versions of the GNU Lesser General Public License shall
|
||||
apply, that proxy's public statement of acceptance of any version is
|
||||
permanent authorization for you to choose that version for the
|
||||
Library.
|
||||
|
||||
###############################################################################
|
||||
|
||||
Attribution-ShareAlike 4.0 International
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Corporation ("Creative Commons") is not a law firm and
|
||||
does not provide legal services or legal advice. Distribution of
|
||||
Creative Commons public licenses does not create a lawyer-client or
|
||||
other relationship. Creative Commons makes its licenses and related
|
||||
information available on an "as-is" basis. Creative Commons gives no
|
||||
warranties regarding its licenses, any material licensed under their
|
||||
terms and conditions, or any related information. Creative Commons
|
||||
disclaims all liability for damages resulting from their use to the
|
||||
fullest extent possible.
|
||||
|
||||
Using Creative Commons Public Licenses
|
||||
|
||||
Creative Commons public licenses provide a standard set of terms and
|
||||
conditions that creators and other rights holders may use to share
|
||||
original works of authorship and other material subject to copyright
|
||||
and certain other rights specified in the public license below. The
|
||||
following considerations are for informational purposes only, are not
|
||||
exhaustive, and do not form part of our licenses.
|
||||
|
||||
Considerations for licensors: Our public licenses are
|
||||
intended for use by those authorized to give the public
|
||||
permission to use material in ways otherwise restricted by
|
||||
copyright and certain other rights. Our licenses are
|
||||
irrevocable. Licensors should read and understand the terms
|
||||
and conditions of the license they choose before applying it.
|
||||
Licensors should also secure all rights necessary before
|
||||
applying our licenses so that the public can reuse the
|
||||
material as expected. Licensors should clearly mark any
|
||||
material not subject to the license. This includes other CC-
|
||||
licensed material, or material used under an exception or
|
||||
limitation to copyright. More considerations for licensors:
|
||||
wiki.creativecommons.org/Considerations_for_licensors
|
||||
|
||||
Considerations for the public: By using one of our public
|
||||
licenses, a licensor grants the public permission to use the
|
||||
licensed material under specified terms and conditions. If
|
||||
the licensor's permission is not necessary for any reason--for
|
||||
example, because of any applicable exception or limitation to
|
||||
copyright--then that use is not regulated by the license. Our
|
||||
licenses grant only permissions under copyright and certain
|
||||
other rights that a licensor has authority to grant. Use of
|
||||
the licensed material may still be restricted for other
|
||||
reasons, including because others have copyright or other
|
||||
rights in the material. A licensor may make special requests,
|
||||
such as asking that all changes be marked or described.
|
||||
Although not required by our licenses, you are encouraged to
|
||||
respect those requests where reasonable. More considerations
|
||||
for the public:
|
||||
wiki.creativecommons.org/Considerations_for_licensees
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons Attribution-ShareAlike 4.0 International Public
|
||||
License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution-ShareAlike 4.0 International Public License ("Public
|
||||
License"). To the extent this Public License may be interpreted as a
|
||||
contract, You are granted the Licensed Rights in consideration of Your
|
||||
acceptance of these terms and conditions, and the Licensor grants You
|
||||
such rights in consideration of benefits the Licensor receives from
|
||||
making the Licensed Material available under these terms and
|
||||
conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. BY-SA Compatible License means a license listed at
|
||||
creativecommons.org/compatiblelicenses, approved by Creative
|
||||
Commons as essentially the equivalent of this Public License.
|
||||
|
||||
d. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
e. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
f. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
g. License Elements means the license attributes listed in the name
|
||||
of a Creative Commons Public License. The License Elements of this
|
||||
Public License are Attribution and ShareAlike.
|
||||
|
||||
h. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
i. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
j. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
k. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
l. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
m. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. Additional offer from the Licensor -- Adapted Material.
|
||||
Every recipient of Adapted Material from You
|
||||
automatically receives an offer from the Licensor to
|
||||
exercise the Licensed Rights in the Adapted Material
|
||||
under the conditions of the Adapter's License You apply.
|
||||
|
||||
c. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
b. ShareAlike.
|
||||
|
||||
In addition to the conditions in Section 3(a), if You Share
|
||||
Adapted Material You produce, the following conditions also apply.
|
||||
|
||||
1. The Adapter's License You apply must be a Creative Commons
|
||||
license with the same License Elements, this version or
|
||||
later, or a BY-SA Compatible License.
|
||||
|
||||
2. You must include the text of, or the URI or hyperlink to, the
|
||||
Adapter's License You apply. You may satisfy this condition
|
||||
in any reasonable manner based on the medium, means, and
|
||||
context in which You Share Adapted Material.
|
||||
|
||||
3. You may not offer or impose any additional or different terms
|
||||
or conditions on, or apply any Effective Technological
|
||||
Measures to, Adapted Material that restrict exercise of the
|
||||
rights granted under the Adapter's License You apply.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material,
|
||||
|
||||
including for purposes of Section 3(b); and
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
|
||||
|
||||
=======================================================================
|
||||
|
||||
Creative Commons is not a party to its public
|
||||
licenses. Notwithstanding, Creative Commons may elect to apply one of
|
||||
its public licenses to material it publishes and in those instances
|
||||
will be considered the “Licensor.” The text of the Creative Commons
|
||||
public licenses is dedicated to the public domain under the CC0 Public
|
||||
Domain Dedication. Except for the limited purpose of indicating that
|
||||
material is shared under a Creative Commons public license or as
|
||||
otherwise permitted by the Creative Commons policies published at
|
||||
creativecommons.org/policies, Creative Commons does not authorize the
|
||||
use of the trademark "Creative Commons" or any other trademark or logo
|
||||
of Creative Commons without its prior written consent including,
|
||||
without limitation, in connection with any unauthorized modifications
|
||||
to any of its public licenses or any other arrangements,
|
||||
understandings, or agreements concerning use of licensed material. For
|
||||
the avoidance of doubt, this paragraph does not form part of the
|
||||
public licenses.
|
||||
|
||||
Creative Commons may be contacted at creativecommons.org.
|
||||
@@ -0,0 +1,23 @@
|
||||
# Basic Materials mod
|
||||
|
||||
mod that adds basic material nodes and items
|
||||
|
||||
## Install
|
||||
|
||||
### Option 1: use content tab in minetest
|
||||
|
||||
* click the content tab
|
||||
* search for basic materials
|
||||
* click install on basic materials
|
||||
|
||||
### Option 2: download from [ContentDB](https://content.minetest.net/packages/VanessaE/basic_materials/)
|
||||
|
||||
* click the above link or search for basic materials on ContentDB
|
||||
* select the download button on the basic materials page
|
||||
* extract the zip downloaded from the previous step
|
||||
* place in your mods folder
|
||||
|
||||
### Option 3: use git
|
||||
|
||||
* `git clone https://github.com/mt-mods/basic_materials.git`
|
||||
* `cd basic_materials`
|
||||
@@ -0,0 +1,34 @@
|
||||
minetest.register_alias("homedecor:plastic_sheeting", "basic_materials:plastic_sheet")
|
||||
minetest.register_alias("homedecor:plastic_strips", "basic_materials:plastic_strip")
|
||||
minetest.register_alias("homedecor:empty_spool", "basic_materials:empty_spool")
|
||||
minetest.register_alias("homedecor:oil_extract", "basic_materials:oil_extract")
|
||||
minetest.register_alias("homedecor:paraffin", "basic_materials:paraffin")
|
||||
minetest.register_alias("homedecor:plastic_base", "basic_materials:paraffin")
|
||||
minetest.register_alias("homedecor:terracotta_base", "basic_materials:terracotta_base")
|
||||
minetest.register_alias("gloopblocks:wet_cement", "basic_materials:wet_cement")
|
||||
minetest.register_alias("gloopblocks:cement", "basic_materials:cement_block")
|
||||
minetest.register_alias("technic:concrete", "basic_materials:concrete_block")
|
||||
minetest.register_alias("homedecor:ic", "basic_materials:ic")
|
||||
minetest.register_alias("homedecor:motor", "basic_materials:motor")
|
||||
minetest.register_alias("technic:motor", "basic_materials:motor")
|
||||
minetest.register_alias("homedecor:heating_element", "basic_materials:heating_element")
|
||||
minetest.register_alias("homedecor:power_crystal", "basic_materials:energy_crystal_simple")
|
||||
minetest.register_alias("homedecor:copper_wire", "basic_materials:copper_wire")
|
||||
minetest.register_alias("technic:fine_copper_wire", "basic_materials:copper_wire")
|
||||
minetest.register_alias("technic:fine_silver_wire", "basic_materials:silver_wire")
|
||||
minetest.register_alias("technic:fine_gold_wire", "basic_materials:gold_wire")
|
||||
minetest.register_alias("homedecor:steel_wire", "basic_materials:steel_wire")
|
||||
minetest.register_alias("homedecor:brass_ingot", "basic_materials:brass_ingot")
|
||||
minetest.register_alias("technic:brass_ingot", "basic_materials:brass_ingot")
|
||||
minetest.register_alias("technic:brass_block", "basic_materials:brass_block")
|
||||
minetest.register_alias("homedecor:copper_strip", "basic_materials:copper_strip")
|
||||
minetest.register_alias("homedecor:steel_strip", "basic_materials:steel_strip")
|
||||
minetest.register_alias("homedecor:chainlink_brass", "basic_materials:chainlink_brass")
|
||||
minetest.register_alias("chains:chain", "basic_materials:chain_steel")
|
||||
minetest.register_alias("chains:chain_brass", "basic_materials:chain_brass")
|
||||
minetest.register_alias("pipeworks:gear", "basic_materials:gear_steel")
|
||||
minetest.register_alias("technic:rebar", "basic_materials:steel_bar")
|
||||
|
||||
minetest.register_alias_force("mesecons_materials:silicon", "basic_materials:silicon")
|
||||
minetest.register_alias_force("glooptest:chainlink", "basic_materials:chainlink_steel")
|
||||
minetest.register_alias_force("homedecor:chainlink_steel", "basic_materials:chainlink_steel")
|
||||
@@ -0,0 +1,188 @@
|
||||
local S = minetest.get_translator("basic_materials")
|
||||
|
||||
minetest.register_craftitem("basic_materials:plastic_sheet", {
|
||||
description = S("Plastic sheet"),
|
||||
inventory_image = "basic_materials_plastic_sheet.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:plastic_strip", {
|
||||
description = S("Plastic strips"),
|
||||
groups = { strip = 1 },
|
||||
inventory_image = "basic_materials_plastic_strip.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:empty_spool", {
|
||||
description = S("Empty wire spool"),
|
||||
inventory_image = "basic_materials_empty_spool.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:oil_extract", {
|
||||
description = S("Oil extract"),
|
||||
inventory_image = "basic_materials_oil_extract.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:paraffin", {
|
||||
description = S("Unprocessed paraffin"),
|
||||
inventory_image = "basic_materials_paraffin.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:terracotta_base", {
|
||||
description = S("Uncooked Terracotta Base"),
|
||||
inventory_image = "basic_materials_terracotta_base.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:wet_cement", {
|
||||
description = S("Wet Cement"),
|
||||
inventory_image = "basic_materials_wet_cement.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:silicon", {
|
||||
description = S("Silicon lump"),
|
||||
inventory_image = "basic_materials_silicon.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:ic", {
|
||||
description = S("Simple Integrated Circuit"),
|
||||
inventory_image = "basic_materials_ic.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:motor", {
|
||||
description = S("Simple Motor"),
|
||||
inventory_image = "basic_materials_motor.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:heating_element", {
|
||||
description = S("Heating element"),
|
||||
inventory_image = "basic_materials_heating_element.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:energy_crystal_simple", {
|
||||
description = S("Simple energy crystal"),
|
||||
inventory_image = "basic_materials_energy_crystal.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:steel_wire", {
|
||||
description = S("Spool of steel wire"),
|
||||
groups = { wire = 1 },
|
||||
inventory_image = "basic_materials_steel_wire.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:copper_wire", {
|
||||
description = S("Spool of copper wire"),
|
||||
groups = { wire = 1 },
|
||||
inventory_image = "basic_materials_copper_wire.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:silver_wire", {
|
||||
description = S("Spool of silver wire"),
|
||||
groups = { wire = 1 },
|
||||
inventory_image = "basic_materials_silver_wire.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:gold_wire", {
|
||||
description = S("Spool of gold wire"),
|
||||
groups = { wire = 1 },
|
||||
inventory_image = "basic_materials_gold_wire.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:stainless_steel_wire", {
|
||||
description = S("Spool of stainless steel wire"),
|
||||
groups = { wire = 1 },
|
||||
inventory_image = "basic_materials_stainless_steel_wire.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:aluminum_wire", {
|
||||
description = S("Spool of aluminum wire"),
|
||||
groups = { wire = 1 },
|
||||
inventory_image = "basic_materials_aluminum_wire.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:steel_strip", {
|
||||
description = S("Steel Strip"),
|
||||
groups = { strip = 1 },
|
||||
inventory_image = "basic_materials_steel_strip.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:copper_strip", {
|
||||
description = S("Copper Strip"),
|
||||
groups = { strip = 1 },
|
||||
inventory_image = "basic_materials_copper_strip.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:lead_strip", {
|
||||
description = S("Lead Strip"),
|
||||
groups = { strip = 1 },
|
||||
inventory_image = "basic_materials_lead_strip.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:gold_strip", {
|
||||
description = S("Gold Strip"),
|
||||
groups = { strip = 1 },
|
||||
inventory_image = "basic_materials_gold_strip.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:stainless_steel_strip", {
|
||||
description = S("Stainless Steel Strip"),
|
||||
groups = { strip = 1 },
|
||||
inventory_image = "basic_materials_stainless_steel_strip.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:aluminum_strip", {
|
||||
description = S("Aluminum Strip"),
|
||||
groups = { strip = 1 },
|
||||
inventory_image = "basic_materials_aluminum_strip.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:steel_bar", {
|
||||
description = S("Steel Bar"),
|
||||
inventory_image = "basic_materials_steel_bar.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:carbon_steel_bar", {
|
||||
description = S("Carbon Steel Bar"),
|
||||
inventory_image = "basic_materials_carbon_steel_bar.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:stainless_steel_bar", {
|
||||
description = S("Stainless Steel Bar"),
|
||||
inventory_image = "basic_materials_stainless_steel_bar.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:aluminum_bar", {
|
||||
description = S("Aluminum Bar"),
|
||||
inventory_image = "basic_materials_aluminum_bar.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:chainlink_brass", {
|
||||
description = S("Chainlinks (brass)"),
|
||||
groups = { chainlinks = 1 },
|
||||
inventory_image = "basic_materials_chainlink_brass.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:chainlink_steel", {
|
||||
description = S("Chainlinks (steel)"),
|
||||
groups = { chainlinks = 1 },
|
||||
inventory_image = "basic_materials_chainlink_steel.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:brass_ingot", {
|
||||
description = S("Brass Ingot"),
|
||||
inventory_image = "basic_materials_brass_ingot.png",
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:gear_steel", {
|
||||
description = S("Steel gear"),
|
||||
inventory_image = "basic_materials_gear_steel.png"
|
||||
})
|
||||
|
||||
minetest.register_craftitem("basic_materials:padlock", {
|
||||
description = S("Padlock"),
|
||||
inventory_image = "basic_materials_padlock.png"
|
||||
})
|
||||
|
||||
if minetest.get_modpath("hades_materials") then
|
||||
minetest.register_alias_force("basic_materials:plastic_sheet", "hades_materials:plastic_sheeting")
|
||||
minetest.register_alias_force("basic_materials:paraffin", "hades_materials:plastic_base")
|
||||
minetest.register_alias_force("basic_materials:silicon", "hades_materials:silicon")
|
||||
end
|
||||
|
||||
@@ -0,0 +1,441 @@
|
||||
local materials = xcompat.materials
|
||||
|
||||
local have_hades_materials = minetest.get_modpath("hades_materials")
|
||||
|
||||
local function compress_craft(input)
|
||||
local buffer = {}
|
||||
for _, item in pairs(input) do
|
||||
if type(item)=="table" then
|
||||
for _, inneritem in pairs(item) do
|
||||
buffer[inneritem] = (buffer[inneritem] or 0) + 1
|
||||
end
|
||||
elseif item ~= "" then
|
||||
buffer[item] = (buffer[item] or 0) + 1
|
||||
end
|
||||
end
|
||||
|
||||
local output = {}
|
||||
for item, count in pairs(buffer) do
|
||||
output[#output + 1] = item .. " " .. count
|
||||
end
|
||||
return output
|
||||
end
|
||||
|
||||
local function register_craft(input)
|
||||
if minetest.get_modpath("rp_crafting") then
|
||||
local rp_craft = compress_craft(input.recipe)
|
||||
if #rp_craft > crafting.MAX_INPUTS then
|
||||
minetest.log("error", "[basic_materials] unable to register craft for " .. input.output)
|
||||
return
|
||||
end
|
||||
|
||||
crafting.register_craft({
|
||||
output = input.output,
|
||||
items = rp_craft
|
||||
})
|
||||
else
|
||||
minetest.register_craft(input)
|
||||
end
|
||||
end
|
||||
|
||||
-- Craft recipes
|
||||
register_craft({
|
||||
output = "basic_materials:chainlink_brass 12",
|
||||
recipe = {
|
||||
{"", "basic_materials:brass_ingot", "basic_materials:brass_ingot"},
|
||||
{"basic_materials:brass_ingot", "", "basic_materials:brass_ingot"},
|
||||
{"basic_materials:brass_ingot", "basic_materials:brass_ingot", ""},
|
||||
},
|
||||
})
|
||||
|
||||
register_craft({
|
||||
output = "basic_materials:chain_steel 2",
|
||||
recipe = {
|
||||
{"basic_materials:chainlink_steel"},
|
||||
{"basic_materials:chainlink_steel"},
|
||||
{"basic_materials:chainlink_steel"}
|
||||
}
|
||||
})
|
||||
|
||||
register_craft({
|
||||
output = "basic_materials:chain_brass 2",
|
||||
recipe = {
|
||||
{"basic_materials:chainlink_brass"},
|
||||
{"basic_materials:chainlink_brass"},
|
||||
{"basic_materials:chainlink_brass"}
|
||||
}
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
type = "shapeless",
|
||||
output = "basic_materials:brass_ingot 9",
|
||||
recipe = {"basic_materials:brass_block"},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:brass_block",
|
||||
recipe = {
|
||||
{"basic_materials:brass_ingot", "basic_materials:brass_ingot", "basic_materials:brass_ingot"},
|
||||
{"basic_materials:brass_ingot", "basic_materials:brass_ingot", "basic_materials:brass_ingot"},
|
||||
{"basic_materials:brass_ingot", "basic_materials:brass_ingot", "basic_materials:brass_ingot"},
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:plastic_strip 9",
|
||||
recipe = {
|
||||
{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"}
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:empty_spool 3",
|
||||
recipe = {
|
||||
{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"},
|
||||
{"", "basic_materials:plastic_sheet", ""},
|
||||
{"basic_materials:plastic_sheet", "basic_materials:plastic_sheet", "basic_materials:plastic_sheet"}
|
||||
},
|
||||
})
|
||||
|
||||
if have_hades_materials then
|
||||
minetest.clear_craft({
|
||||
type = "shapeless",
|
||||
recipe = {"group:leaves", "group:leaves", "group:leaves", "group:leaves", "group:leaves", "group:leaves"}
|
||||
})
|
||||
end
|
||||
|
||||
register_craft({
|
||||
type = "shapeless",
|
||||
output = "basic_materials:oil_extract 2",
|
||||
recipe = {"group:leaves", "group:leaves", "group:leaves", "group:leaves", "group:leaves", "group:leaves"}
|
||||
})
|
||||
|
||||
-- Cooking recipes
|
||||
if not have_hades_materials then
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "basic_materials:plastic_sheet",
|
||||
recipe = "basic_materials:paraffin",
|
||||
})
|
||||
end
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "basic_materials:paraffin",
|
||||
recipe = "basic_materials:oil_extract",
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "cooking",
|
||||
output = "basic_materials:cement_block",
|
||||
recipe = "basic_materials:wet_cement",
|
||||
cooktime = 8
|
||||
})
|
||||
|
||||
-- Fuel recipes
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "basic_materials:plastic_sheet",
|
||||
burntime = 30,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "basic_materials:oil_extract",
|
||||
burntime = 30,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
type = "fuel",
|
||||
recipe = "basic_materials:paraffin",
|
||||
burntime = 30,
|
||||
})
|
||||
|
||||
register_craft({
|
||||
output = "basic_materials:concrete_block 6",
|
||||
recipe = {
|
||||
{"group:sand", "basic_materials:wet_cement", materials.gravel},
|
||||
{"basic_materials:steel_bar", "basic_materials:wet_cement", "basic_materials:steel_bar"},
|
||||
{materials.gravel, "basic_materials:wet_cement", "group:sand"},
|
||||
}
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:motor 2",
|
||||
recipe = {
|
||||
{materials.mese_crystal_fragment, "basic_materials:copper_wire", "basic_materials:plastic_sheet"},
|
||||
{materials.copper_ingot, materials.steel_ingot, materials.steel_ingot},
|
||||
{materials.mese_crystal_fragment, "basic_materials:copper_wire", "basic_materials:plastic_sheet"}
|
||||
},
|
||||
replacements = {
|
||||
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
|
||||
{"basic_materials:copper_wire", "basic_materials:empty_spool"},
|
||||
}
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:heating_element 2",
|
||||
recipe = {
|
||||
{materials.copper_ingot, materials.mese_crystal_fragment, materials.copper_ingot}
|
||||
},
|
||||
})
|
||||
|
||||
register_craft({
|
||||
--type = "shapeless",
|
||||
output = "basic_materials:energy_crystal_simple 2",
|
||||
recipe = {
|
||||
{materials.mese_crystal_fragment, materials.torch, materials.mese_crystal_fragment},
|
||||
{materials.diamond, materials.gold_ingot, materials.diamond}
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:copper_wire 2",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
materials.copper_ingot,
|
||||
"basic_materials:empty_spool",
|
||||
"basic_materials:empty_spool",
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:gold_wire 2",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
materials.gold_ingot,
|
||||
"basic_materials:empty_spool",
|
||||
"basic_materials:empty_spool",
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:steel_wire 2",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
materials.steel_ingot,
|
||||
"basic_materials:empty_spool",
|
||||
"basic_materials:empty_spool",
|
||||
},
|
||||
})
|
||||
|
||||
if materials.stainless_steel_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:stainless_steel_wire 2",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
materials.stainless_steel_ingot,
|
||||
"basic_materials:empty_spool",
|
||||
"basic_materials:empty_spool",
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
if materials.aluminum_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:aluminum_wire 2",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
materials.aluminum_ingot,
|
||||
"basic_materials:empty_spool",
|
||||
"basic_materials:empty_spool",
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:steel_strip 12",
|
||||
recipe = {
|
||||
{"", materials.steel_ingot, ""},
|
||||
{materials.steel_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:copper_strip 12",
|
||||
recipe = {
|
||||
{"", materials.copper_ingot, ""},
|
||||
{materials.copper_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:gold_strip 12",
|
||||
recipe = {
|
||||
{"", materials.gold_ingot, ""},
|
||||
{materials.gold_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
|
||||
if materials.lead_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:lead_strip 12",
|
||||
recipe = {
|
||||
{"", materials.lead_ingot, ""},
|
||||
{materials.lead_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
if materials.stainless_steel_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:stainless_steel_strip 12",
|
||||
recipe = {
|
||||
{"", materials.stainless_steel_ingot, ""},
|
||||
{materials.stainless_steel_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
if materials.aluminum_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:aluminum_strip 12",
|
||||
recipe = {
|
||||
{"", materials.aluminum_ingot, ""},
|
||||
{materials.aluminum_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:steel_bar 6",
|
||||
recipe = {
|
||||
{"", "", materials.steel_ingot},
|
||||
{"", materials.steel_ingot, ""},
|
||||
{materials.steel_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
|
||||
if materials.carbon_steel_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:carbon_steel_bar 6",
|
||||
recipe = {
|
||||
{"", "", materials.carbon_steel_ingot},
|
||||
{"", materials.carbon_steel_ingot, ""},
|
||||
{materials.carbon_steel_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
if materials.stainless_steel_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:stainless_steel_bar 6",
|
||||
recipe = {
|
||||
{"", "", materials.stainless_steel_ingot},
|
||||
{"", materials.stainless_steel_ingot, ""},
|
||||
{materials.stainless_steel_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
if materials.aluminum_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:aluminum_bar 6",
|
||||
recipe = {
|
||||
{"", "", materials.aluminum_ingot},
|
||||
{"", materials.aluminum_ingot, ""},
|
||||
{materials.aluminum_ingot, "", ""},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:padlock 2",
|
||||
recipe = {
|
||||
{"basic_materials:steel_bar"},
|
||||
{materials.steel_ingot},
|
||||
{materials.steel_ingot},
|
||||
},
|
||||
})
|
||||
|
||||
register_craft({
|
||||
output = "basic_materials:chainlink_steel 12",
|
||||
recipe = {
|
||||
{"", materials.steel_ingot, materials.steel_ingot},
|
||||
{materials.steel_ingot, "", materials.steel_ingot},
|
||||
{materials.steel_ingot, materials.steel_ingot, ""},
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:gear_steel 6",
|
||||
recipe = {
|
||||
{"", materials.steel_ingot, ""},
|
||||
{materials.steel_ingot,"basic_materials:chainlink_steel", materials.steel_ingot},
|
||||
{"", materials.steel_ingot, ""}
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
type = "shapeless",
|
||||
output = "basic_materials:terracotta_base 8",
|
||||
recipe = {
|
||||
materials.water_bucket,
|
||||
materials.clay_lump,
|
||||
materials.gravel,
|
||||
},
|
||||
replacements = {{materials.water_bucket, materials.empty_bucket}},
|
||||
})
|
||||
|
||||
register_craft({
|
||||
type = "shapeless",
|
||||
output = "basic_materials:wet_cement 3",
|
||||
recipe = {
|
||||
materials.dirt,
|
||||
materials.dye_dark_grey,
|
||||
materials.dye_dark_grey,
|
||||
materials.dye_dark_grey,
|
||||
materials.water_bucket
|
||||
},
|
||||
replacements = {{materials.water_bucket, materials.empty_bucket}},
|
||||
})
|
||||
|
||||
if not have_hades_materials then
|
||||
register_craft( {
|
||||
output = "basic_materials:silicon 4",
|
||||
recipe = {
|
||||
{materials.sand, materials.sand},
|
||||
{materials.sand, materials.steel_ingot},
|
||||
},
|
||||
})
|
||||
end
|
||||
|
||||
register_craft( {
|
||||
output = "basic_materials:ic 4",
|
||||
recipe = {
|
||||
{"basic_materials:silicon", "basic_materials:silicon"},
|
||||
{"basic_materials:silicon", materials.copper_ingot},
|
||||
},
|
||||
})
|
||||
|
||||
-- Without moreores, there still should be a way to create brass.
|
||||
register_craft( {
|
||||
output = "basic_materials:brass_ingot 9",
|
||||
recipe = {
|
||||
{materials.copper_ingot, materials.tin_ingot, materials.copper_ingot},
|
||||
{materials.gold_ingot, materials.copper_ingot, materials.tin_ingot},
|
||||
{materials.copper_ingot, materials.tin_ingot, materials.copper_ingot},
|
||||
},
|
||||
})
|
||||
|
||||
if materials.silver_ingot then
|
||||
register_craft( {
|
||||
output = "basic_materials:silver_wire 2",
|
||||
type = "shapeless",
|
||||
recipe = {
|
||||
materials.silver_ingot,
|
||||
"basic_materials:empty_spool",
|
||||
"basic_materials:empty_spool",
|
||||
},
|
||||
})
|
||||
|
||||
register_craft( {
|
||||
type = "shapeless",
|
||||
output = "basic_materials:brass_ingot 3",
|
||||
recipe = {
|
||||
materials.copper_ingot,
|
||||
materials.copper_ingot,
|
||||
materials.silver_ingot,
|
||||
},
|
||||
})
|
||||
end
|
||||
@@ -0,0 +1,14 @@
|
||||
-- Basic materials mod
|
||||
-- by Vanessa Dannenberg
|
||||
|
||||
-- This mod supplies all those little random craft items that everyone always
|
||||
-- seems to need, such as metal bars (ala rebar), plastic, wire, and so on.
|
||||
|
||||
basic_materials = {}
|
||||
basic_materials.mod = { author = "Vanessa Dannenberg" }
|
||||
basic_materials.modpath = minetest.get_modpath("basic_materials")
|
||||
|
||||
dofile(basic_materials.modpath .. "/nodes.lua")
|
||||
dofile(basic_materials.modpath .. "/craftitems.lua")
|
||||
dofile(basic_materials.modpath .. "/crafts.lua")
|
||||
dofile(basic_materials.modpath .. "/aliases.lua")
|
||||
@@ -0,0 +1,33 @@
|
||||
# textdomain: basic_materials
|
||||
Silicon lump=Siliziumklumpen
|
||||
Simple Integrated Circuit=Einfacher Integrierter Schaltkreis
|
||||
Simple Motor=Einfacher Motor
|
||||
Heating element=Heizelement
|
||||
Simple energy crystal=Einfacher Energiekristall
|
||||
|
||||
Spool of steel wire=Spule mit Stahldraht
|
||||
Spool of copper wire=Spule mit Kupferdraht
|
||||
Spool of silver wire=Spule mit Silberdraht
|
||||
Spool of gold wire=Spule mit Golddraht
|
||||
Steel Strip=Stahlstreifen
|
||||
Copper Strip=Kupferstreifen
|
||||
Steel Bar=Stahlstab
|
||||
Chainlinks (brass)=Messingkettenglieder
|
||||
Chainlinks (steel)=Stahlkettenglieder
|
||||
Brass Ingot=Messingbarren
|
||||
Steel gear=Stahlzahnrad
|
||||
Padlock=Vorhängeschloss
|
||||
Chain (steel, hanging)=Hängende Stahlkette
|
||||
Chain (brass, hanging)=Hängende Messingkette
|
||||
Brass Block=Messingblock
|
||||
|
||||
Oil extract=Ölextrakt
|
||||
Unprocessed paraffin=Unverarbeitetes Paraffin
|
||||
Uncooked Terracotta Base=Ungebranntes Terrakotta
|
||||
Wet Cement=Nasser Zement
|
||||
Cement=Zement
|
||||
Concrete Block=Betonblock
|
||||
|
||||
Plastic sheet=Kunststoffplatte
|
||||
Plastic strips=Kunststoffstreifen
|
||||
Empty wire spool=Leere Drahtspule
|
||||
@@ -0,0 +1,33 @@
|
||||
# textdomain: basic_materials
|
||||
Silicon lump=Morceau de silicium
|
||||
Simple Integrated Circuit=Circuit intégré simple
|
||||
Simple Motor=Moteur simple
|
||||
Heating element=Élément chauffant
|
||||
Simple energy crystal=Cristal d’énergie simple
|
||||
|
||||
Spool of steel wire=Bobine de fil d’acier
|
||||
Spool of copper wire=Bobine de fil de cuivre
|
||||
Spool of silver wire=Bobine de fil d’argent
|
||||
Spool of gold wire=Bobine de fil d’or
|
||||
Steel Strip=Bande de acier
|
||||
Copper Strip=Bande de cuivre
|
||||
Steel Bar=Barre d’acier
|
||||
Chainlinks (brass)=Maillon en laiton
|
||||
Chainlinks (steel)=Maillon en acier
|
||||
Brass Ingot=Lingot de laiton
|
||||
Steel gear=Rouage en acier
|
||||
Padlock=Cadenas
|
||||
Chain (steel, hanging)=Chaine en acier
|
||||
Chain (brass, hanging)=Chaine en laiton
|
||||
Brass Block=Bloc de laiton
|
||||
|
||||
Oil extract=Extrait d’huile
|
||||
Unprocessed paraffin=Paraffine non transformée
|
||||
Uncooked Terracotta Base=Argile crue
|
||||
Wet Cement=Ciment humide
|
||||
Cement=Ciment
|
||||
Concrete Block=Bloc de béton
|
||||
|
||||
Plastic sheet=Morceau de plastique
|
||||
Plastic strips=Bande de plastique
|
||||
Empty wire spool=Bobine de fil vide
|
||||
@@ -0,0 +1,34 @@
|
||||
# textdomain: basic_materials
|
||||
# Author: Salvo 'LtWorf' Tomaselli <tiposchi@tiscali.it>
|
||||
Silicon lump=Grumo di silicio
|
||||
Simple Integrated Circuit=Circuito integrato semplice
|
||||
Simple Motor=Motore semplice
|
||||
Heating element=Elemento riscaldante
|
||||
Simple energy crystal=Cristallo di energia semplice
|
||||
|
||||
Spool of steel wire=Bobina di filo d'acciaio
|
||||
Spool of copper wire=Bobina di filo di rame
|
||||
Spool of silver wire=Bobina di filo d'argento
|
||||
Spool of gold wire=Bobina di filo d'oro
|
||||
Steel Strip=Striscia d'acciaio
|
||||
Copper Strip=Striscia di rame
|
||||
Steel Bar=Barra d'acciaio
|
||||
Chainlinks (brass)=Catena (ottone)
|
||||
Chainlinks (steel)=Catena (acciaio)
|
||||
Brass Ingot=Lingotto di ottone
|
||||
Steel gear=Ingranaggio d'acciaio
|
||||
Padlock=Catenaccio
|
||||
Chain (steel, hanging)=Catena (acciaio, pendente)
|
||||
Chain (brass, hanging)=Catena (ottone, pendente)
|
||||
Brass Block=Blocco di ottone
|
||||
|
||||
Oil extract=Estratto d'olio
|
||||
Unprocessed paraffin=Paraffina grezza
|
||||
Uncooked Terracotta Base=Argilla cruda
|
||||
Wet Cement=Cemento umido
|
||||
Cement=Cemento
|
||||
Concrete Block=Blocco di calcestruzzo
|
||||
|
||||
Plastic sheet=Foglio di plastica
|
||||
Plastic strips=Striscia di plastica
|
||||
Empty wire spool=Rocchetto vuoto
|
||||
@@ -0,0 +1,33 @@
|
||||
# textdomain: basic_materials
|
||||
Silicon lump=Кусок Кремния
|
||||
Simple Integrated Circuit=Микросхема
|
||||
Simple Motor=Мотор
|
||||
Heating element=Нить Накала
|
||||
Simple energy crystal=Энергетический Кристалл
|
||||
|
||||
Spool of steel wire=Катушка Стальной Проволоки
|
||||
Spool of copper wire=Катушка Медной Проволоки
|
||||
Spool of silver wire=Катушка Серебрянной Проволоки
|
||||
Spool of gold wire=Катушка Золотой Проволоки
|
||||
Steel Strip=Стальная Полоса
|
||||
Copper Strip=Медная Полоса
|
||||
Steel Bar=Стальной Прут
|
||||
Chainlinks (brass)=Латунные Звенья
|
||||
Chainlinks (steel)=Стальные Звенья
|
||||
Brass Ingot=Латунный Брусок
|
||||
Steel gear=Стальная Шестерня
|
||||
Padlock=Навесной Замок
|
||||
Chain (steel, hanging)=Стальная Цепь
|
||||
Chain (brass, hanging)=Латунная Цепь
|
||||
Brass Block=Латунный Блок
|
||||
|
||||
Oil extract=Масляный Экстракт
|
||||
Unprocessed paraffin=Необработанный Парафин
|
||||
Uncooked Terracotta Base=Ком Мокрого Терракота
|
||||
Wet Cement=Ком Мокрого Цемента
|
||||
Cement=Цемент
|
||||
Concrete Block=Железобетон
|
||||
|
||||
Plastic sheet=Пластиковый Лист
|
||||
Plastic strips=Пластиковая Полоса
|
||||
Empty wire spool=Пустая Катушка
|
||||
@@ -0,0 +1,48 @@
|
||||
# textdomain: basic_materials
|
||||
|
||||
Basic Materials and items=Базові матеріали та предмети
|
||||
Provides a small selection of "basic" materials and items that other mods should use when possible -- things like steel bars and chains, wire, plastic strips and sheets, and more.=Пропонує обмежений набір "основних" матеріалів та виробів, які іншим модам рекомендується використовувати, де це доречно — наприклад, сталеві бруски та ланцюги, дріт, пластикові стрічки та листи, тощо.
|
||||
|
||||
Silicon lump=Шмат Кремнію
|
||||
Simple Integrated Circuit=Мікросхема
|
||||
Simple Motor=Двигун
|
||||
Heating element=Нагрівальний елемент
|
||||
Simple energy crystal=Енергетичний кристал
|
||||
|
||||
Gold Strip=Золота смужка
|
||||
Lead Strip=Свинцева смужка
|
||||
Aluminum Strip=Алюмінієва смужка
|
||||
|
||||
Aluminum Bar=Алюмінієвий брусок
|
||||
Spool of aluminum wire=Котушка алюмінієвого дроту
|
||||
Carbon Steel Bar=Брусок вуглецевої сталі
|
||||
Stainless Steel Bar=Брусок нержавіючої сталі
|
||||
Spool of stainless steel wire=Котушка дроту з нержавіючої сталі
|
||||
Stainless Steel Strip=Смужка з нержавіючої сталі
|
||||
|
||||
Spool of steel wire=Катушка сталевої проволки
|
||||
Spool of copper wire=Катушка мідної проволки
|
||||
Spool of silver wire=Катушка срібної проволки
|
||||
Spool of gold wire=Катушка золотої проволки
|
||||
Steel Strip=Сталева стрічка
|
||||
Copper Strip=Мідна стрічка
|
||||
Steel Bar=Сталевий Прут
|
||||
Chainlinks (brass)=Латунний ланцюг
|
||||
Chainlinks (steel)=Сталевий ланцюг
|
||||
Brass Ingot=Латунний злиток
|
||||
Steel gear=Сталева шестерня
|
||||
Padlock=Навісний замок
|
||||
Chain (steel, hanging)=Ланцюг (сталевий, підвісний)
|
||||
Chain (brass, hanging)=Ланцюг (латунь, підвісна)
|
||||
Brass Block=Латунний блок
|
||||
|
||||
Oil extract=Олійний екстракт
|
||||
Unprocessed paraffin=Необроблений парафін
|
||||
Uncooked Terracotta Base=Сира теракотова основа
|
||||
Wet Cement=Мокрий цемент
|
||||
Cement=Цемент
|
||||
Concrete Block=Бетонний блок
|
||||
|
||||
Plastic sheet=Лист пластику
|
||||
Plastic strips=Стрічка пластику
|
||||
Empty wire spool=Порожня катушка
|
||||
@@ -0,0 +1,4 @@
|
||||
name = basic_materials
|
||||
depends = xcompat
|
||||
optional_depends = moreores, default, mesecons_materials, dye, bucket, fl_stone, fl_trees, mcl_sounds, hades_core, hades_sounds, hades_materials, hades_dye, hades_bucket, hades_extraores, hades_mesecons_materials, aloz, rp_crafting, mcl_core, mcl_copper
|
||||
min_minetest_version = 5.2.0
|
||||
@@ -0,0 +1,881 @@
|
||||
# Blender v2.73 (sub 0) OBJ File: 'chains.blend'
|
||||
# www.blender.org
|
||||
o Torus.016_Torus
|
||||
v 0.000000 -0.429978 0.000002
|
||||
v 0.000000 -0.401109 0.055211
|
||||
v -0.014044 -0.391975 0.048870
|
||||
v -0.014044 -0.423304 0.000002
|
||||
v -0.009826 -0.379748 0.040970
|
||||
v -0.009826 -0.406012 0.000002
|
||||
v 0.009826 -0.379748 0.040970
|
||||
v 0.009826 -0.406012 0.000002
|
||||
v 0.014044 -0.391975 0.048870
|
||||
v 0.014044 -0.423304 0.000002
|
||||
v 0.000000 -0.316336 0.080195
|
||||
v -0.014044 -0.316336 0.069112
|
||||
v -0.009826 -0.316336 0.057941
|
||||
v 0.009826 -0.316336 0.057941
|
||||
v 0.014044 -0.316336 0.069112
|
||||
v 0.000000 -0.231564 0.055211
|
||||
v -0.014044 -0.240700 0.048870
|
||||
v -0.009826 -0.252925 0.040970
|
||||
v 0.009826 -0.252925 0.040970
|
||||
v 0.014044 -0.240700 0.048870
|
||||
v 0.000000 -0.202695 0.000002
|
||||
v -0.014044 -0.209368 0.000002
|
||||
v -0.009826 -0.226661 0.000002
|
||||
v 0.009826 -0.226661 0.000002
|
||||
v 0.014044 -0.209368 0.000002
|
||||
v 0.000000 -0.231564 -0.055206
|
||||
v -0.014044 -0.240700 -0.048868
|
||||
v -0.009826 -0.252925 -0.040967
|
||||
v 0.009826 -0.252925 -0.040967
|
||||
v 0.014044 -0.240700 -0.048865
|
||||
v 0.000000 -0.316336 -0.080190
|
||||
v -0.014044 -0.316336 -0.069108
|
||||
v -0.009826 -0.316336 -0.057936
|
||||
v 0.009826 -0.316336 -0.057936
|
||||
v 0.014044 -0.316336 -0.069108
|
||||
v 0.000000 -0.400361 -0.055206
|
||||
v -0.014044 -0.391975 -0.048868
|
||||
v -0.009826 -0.379748 -0.040967
|
||||
v 0.009826 -0.379748 -0.040967
|
||||
v 0.014044 -0.391975 -0.048868
|
||||
v 0.000000 -0.262249 0.000002
|
||||
v -0.061672 -0.233381 0.000002
|
||||
v -0.054590 -0.224245 -0.012569
|
||||
v 0.000000 -0.255577 -0.012569
|
||||
v -0.045765 -0.212018 -0.008794
|
||||
v 0.000000 -0.238285 -0.008794
|
||||
v -0.045765 -0.212018 0.008798
|
||||
v 0.000000 -0.238285 0.008798
|
||||
v -0.054590 -0.224245 0.012574
|
||||
v 0.000000 -0.255577 0.012574
|
||||
v -0.089582 -0.148609 0.000002
|
||||
v -0.077200 -0.148609 -0.012569
|
||||
v -0.064722 -0.148609 -0.008794
|
||||
v -0.064722 -0.148609 0.008799
|
||||
v -0.077200 -0.148609 0.012574
|
||||
v -0.061672 -0.063837 0.000002
|
||||
v -0.054590 -0.072971 -0.012569
|
||||
v -0.045765 -0.085198 -0.008794
|
||||
v -0.045765 -0.085198 0.008799
|
||||
v -0.054590 -0.072971 0.012574
|
||||
v 0.000000 -0.034967 0.000002
|
||||
v 0.000000 -0.041641 -0.012569
|
||||
v 0.000000 -0.058933 -0.008794
|
||||
v 0.000000 -0.058933 0.008799
|
||||
v 0.000000 -0.041641 0.012574
|
||||
v 0.061672 -0.063837 0.000002
|
||||
v 0.054590 -0.072971 -0.012569
|
||||
v 0.045765 -0.085198 -0.008794
|
||||
v 0.045765 -0.085198 0.008799
|
||||
v 0.054590 -0.072971 0.012574
|
||||
v 0.089582 -0.148609 0.000002
|
||||
v 0.077200 -0.148609 -0.012569
|
||||
v 0.064722 -0.148609 -0.008794
|
||||
v 0.064722 -0.148609 0.008799
|
||||
v 0.077200 -0.148609 0.012574
|
||||
v 0.061672 -0.232631 0.000002
|
||||
v 0.054590 -0.224245 -0.012569
|
||||
v 0.045765 -0.212018 -0.008794
|
||||
v 0.045765 -0.212018 0.008798
|
||||
v 0.054590 -0.224245 0.012574
|
||||
v 0.000000 0.073316 0.000002
|
||||
v 0.061672 0.102183 0.000002
|
||||
v 0.054590 0.111319 0.012574
|
||||
v 0.000000 0.079988 0.012574
|
||||
v 0.045765 0.123546 0.008799
|
||||
v 0.000000 0.097280 0.008799
|
||||
v 0.045765 0.123546 -0.008794
|
||||
v 0.000000 0.097280 -0.008794
|
||||
v 0.054590 0.111319 -0.012569
|
||||
v 0.000000 0.079988 -0.012569
|
||||
v 0.089582 0.186956 0.000002
|
||||
v 0.077200 0.186956 0.012574
|
||||
v 0.064722 0.186956 0.008799
|
||||
v 0.064722 0.186956 -0.008794
|
||||
v 0.077200 0.186956 -0.012569
|
||||
v 0.061672 0.271728 0.000002
|
||||
v 0.054590 0.262594 0.012574
|
||||
v 0.045765 0.250367 0.008799
|
||||
v 0.045765 0.250367 -0.008794
|
||||
v 0.054590 0.262594 -0.012569
|
||||
v 0.000000 0.300597 0.000002
|
||||
v 0.000000 0.293923 0.012574
|
||||
v 0.000000 0.276631 0.008799
|
||||
v 0.000000 0.276631 -0.008794
|
||||
v 0.000000 0.293923 -0.012569
|
||||
v -0.061672 0.271728 0.000002
|
||||
v -0.054590 0.262594 0.012574
|
||||
v -0.045765 0.250367 0.008799
|
||||
v -0.045765 0.250367 -0.008794
|
||||
v -0.054590 0.262594 -0.012569
|
||||
v -0.089582 0.186956 0.000002
|
||||
v -0.077200 0.186956 0.012574
|
||||
v -0.064722 0.186956 0.008799
|
||||
v -0.064722 0.186956 -0.008794
|
||||
v -0.077200 0.186956 -0.012569
|
||||
v -0.061672 0.102931 0.000002
|
||||
v -0.054590 0.111319 0.012574
|
||||
v -0.045765 0.123546 0.008799
|
||||
v -0.045765 0.123546 -0.008794
|
||||
v -0.054590 0.111319 -0.012569
|
||||
v 0.000000 -0.095037 0.000002
|
||||
v 0.000000 -0.066168 -0.055206
|
||||
v 0.014044 -0.057034 -0.048868
|
||||
v 0.014044 -0.088363 0.000002
|
||||
v 0.009826 -0.044807 -0.040967
|
||||
v 0.009826 -0.071071 0.000002
|
||||
v -0.009826 -0.044807 -0.040967
|
||||
v -0.009826 -0.071071 0.000002
|
||||
v -0.014044 -0.057034 -0.048868
|
||||
v -0.014044 -0.088363 0.000002
|
||||
v 0.000000 0.018605 -0.080190
|
||||
v 0.014044 0.018605 -0.069108
|
||||
v 0.009826 0.018605 -0.057936
|
||||
v -0.009826 0.018605 -0.057936
|
||||
v -0.014044 0.018605 -0.069108
|
||||
v 0.000000 0.103377 -0.055206
|
||||
v 0.014044 0.094243 -0.048868
|
||||
v 0.009826 0.082016 -0.040967
|
||||
v -0.009826 0.082016 -0.040967
|
||||
v -0.014044 0.094243 -0.048868
|
||||
v 0.000000 0.132246 0.000002
|
||||
v 0.014044 0.125572 0.000002
|
||||
v 0.009826 0.108280 0.000002
|
||||
v -0.009826 0.108280 0.000002
|
||||
v -0.014044 0.125572 0.000002
|
||||
v 0.000000 0.103377 0.055211
|
||||
v 0.014044 0.094243 0.048870
|
||||
v 0.009826 0.082016 0.040970
|
||||
v -0.009826 0.082016 0.040970
|
||||
v -0.014044 0.094243 0.048870
|
||||
v 0.000000 0.018605 0.080195
|
||||
v 0.014044 0.018605 0.069112
|
||||
v 0.009826 0.018605 0.057941
|
||||
v -0.009826 0.018605 0.057941
|
||||
v -0.014044 0.018605 0.069112
|
||||
v 0.000000 -0.065420 0.055211
|
||||
v 0.014044 -0.057032 0.048870
|
||||
v 0.009826 -0.044807 0.040970
|
||||
v -0.009826 -0.044807 0.040970
|
||||
v -0.014044 -0.057032 0.048870
|
||||
v 0.000000 -0.598329 0.000002
|
||||
v 0.061672 -0.569460 0.000002
|
||||
v 0.054590 -0.560326 0.012574
|
||||
v 0.000000 -0.591655 0.012574
|
||||
v 0.045765 -0.548099 0.008798
|
||||
v 0.000000 -0.574363 0.008798
|
||||
v 0.045765 -0.548099 -0.008794
|
||||
v 0.000000 -0.574363 -0.008794
|
||||
v 0.054590 -0.560326 -0.012569
|
||||
v 0.000000 -0.591655 -0.012569
|
||||
v 0.089582 -0.484687 0.000002
|
||||
v 0.077200 -0.484687 0.012574
|
||||
v 0.064722 -0.484687 0.008798
|
||||
v 0.064722 -0.484687 -0.008794
|
||||
v 0.077200 -0.484687 -0.012569
|
||||
v 0.061672 -0.399915 0.000002
|
||||
v 0.054590 -0.409051 0.012574
|
||||
v 0.045765 -0.421278 0.008798
|
||||
v 0.045765 -0.421278 -0.008794
|
||||
v 0.054590 -0.409051 -0.012569
|
||||
v 0.000000 -0.371048 0.000002
|
||||
v 0.000000 -0.377719 0.012574
|
||||
v 0.000000 -0.395012 0.008798
|
||||
v 0.000000 -0.395012 -0.008794
|
||||
v 0.000000 -0.377719 -0.012569
|
||||
v -0.061672 -0.399915 0.000002
|
||||
v -0.054590 -0.409051 0.012574
|
||||
v -0.045765 -0.421278 0.008798
|
||||
v -0.045765 -0.421278 -0.008794
|
||||
v -0.054590 -0.409051 -0.012569
|
||||
v -0.089582 -0.484687 0.000002
|
||||
v -0.077200 -0.484687 0.012574
|
||||
v -0.064722 -0.484687 0.008798
|
||||
v -0.064722 -0.484687 -0.008794
|
||||
v -0.077200 -0.484687 -0.012569
|
||||
v -0.061672 -0.568712 0.000002
|
||||
v -0.054590 -0.560326 0.012574
|
||||
v -0.045765 -0.548099 0.008798
|
||||
v -0.045765 -0.548099 -0.008794
|
||||
v -0.054590 -0.560326 -0.012569
|
||||
v 0.000000 0.241043 0.000002
|
||||
v 0.000000 0.269910 0.055211
|
||||
v -0.014044 0.279047 0.048870
|
||||
v -0.014044 0.247717 0.000002
|
||||
v -0.009826 0.291274 0.040970
|
||||
v -0.009826 0.265007 0.000002
|
||||
v 0.009826 0.291274 0.040970
|
||||
v 0.009826 0.265007 0.000002
|
||||
v 0.014044 0.279047 0.048870
|
||||
v 0.014044 0.247717 0.000002
|
||||
v 0.000000 0.354683 0.080195
|
||||
v -0.014044 0.354683 0.069112
|
||||
v -0.009826 0.354683 0.057941
|
||||
v 0.009826 0.354683 0.057941
|
||||
v 0.014044 0.354683 0.069112
|
||||
v 0.000000 0.439455 0.055211
|
||||
v -0.014044 0.430321 0.048870
|
||||
v -0.009826 0.418094 0.040970
|
||||
v 0.009826 0.418094 0.040970
|
||||
v 0.014044 0.430321 0.048870
|
||||
v 0.000000 0.468325 0.000002
|
||||
v -0.014044 0.461651 0.000002
|
||||
v -0.009826 0.444361 0.000002
|
||||
v 0.009826 0.444361 0.000002
|
||||
v 0.014044 0.461651 0.000002
|
||||
v 0.000000 0.439455 -0.055206
|
||||
v -0.014044 0.430321 -0.048868
|
||||
v -0.009826 0.418094 -0.040967
|
||||
v 0.009826 0.418094 -0.040967
|
||||
v 0.014044 0.430321 -0.048868
|
||||
v 0.000000 0.354683 -0.080190
|
||||
v -0.014044 0.354683 -0.069108
|
||||
v -0.009826 0.354683 -0.057936
|
||||
v 0.009826 0.354683 -0.057936
|
||||
v 0.014044 0.354683 -0.069108
|
||||
v 0.000000 0.270661 -0.055206
|
||||
v -0.014044 0.279047 -0.048868
|
||||
v -0.009826 0.291274 -0.040967
|
||||
v 0.009826 0.291274 -0.040967
|
||||
v 0.014044 0.279047 -0.048868
|
||||
vt 0.187500 0.125000
|
||||
vt 0.250000 0.125000
|
||||
vt 0.250000 0.187500
|
||||
vt 0.187500 0.187500
|
||||
vt 0.250000 0.250000
|
||||
vt 0.187500 0.250000
|
||||
vt 0.250000 0.312500
|
||||
vt 0.187500 0.312500
|
||||
vt 0.250000 0.375000
|
||||
vt 0.187500 0.375000
|
||||
vt 0.187500 0.062500
|
||||
vt 0.250000 0.062500
|
||||
vt 0.312500 0.125000
|
||||
vt 0.312500 0.187500
|
||||
vt 0.312500 0.250000
|
||||
vt 0.312500 0.312500
|
||||
vt 0.312500 0.375000
|
||||
vt 0.312500 0.062500
|
||||
vt 0.375000 0.125000
|
||||
vt 0.375000 0.187500
|
||||
vt 0.375000 0.250000
|
||||
vt 0.375000 0.312500
|
||||
vt 0.375000 0.375000
|
||||
vt 0.375000 0.062500
|
||||
vt 0.437500 0.125000
|
||||
vt 0.437500 0.187500
|
||||
vt 0.437500 0.250000
|
||||
vt 0.437500 0.312500
|
||||
vt 0.437500 0.375000
|
||||
vt 0.437500 0.062500
|
||||
vt 0.500000 0.125000
|
||||
vt 0.500000 0.187500
|
||||
vt 0.500000 0.250000
|
||||
vt 0.500000 0.312500
|
||||
vt 0.500000 0.375000
|
||||
vt 0.500000 0.062500
|
||||
vt -0.000000 0.125000
|
||||
vt 0.062500 0.125000
|
||||
vt 0.062500 0.187500
|
||||
vt -0.000000 0.187500
|
||||
vt 0.062500 0.250000
|
||||
vt -0.000000 0.250000
|
||||
vt 0.062500 0.312500
|
||||
vt -0.000000 0.312500
|
||||
vt 0.062500 0.375000
|
||||
vt -0.000000 0.375000
|
||||
vt -0.000000 0.062500
|
||||
vt 0.062500 0.062500
|
||||
vt 0.125000 0.125000
|
||||
vt 0.125000 0.187500
|
||||
vt 0.125000 0.250000
|
||||
vt 0.125000 0.312500
|
||||
vt 0.125000 0.375000
|
||||
vt 0.125000 0.062500
|
||||
vt 0.750000 0.625000
|
||||
vt 0.812500 0.625000
|
||||
vt 0.812500 0.687500
|
||||
vt 0.750000 0.687500
|
||||
vt 0.750000 0.375000
|
||||
vt 0.812500 0.375000
|
||||
vt 0.812500 0.437500
|
||||
vt 0.750000 0.437500
|
||||
vt 0.812500 0.500000
|
||||
vt 0.750000 0.500000
|
||||
vt 0.812500 0.562500
|
||||
vt 0.750000 0.562500
|
||||
vt 0.875000 0.625000
|
||||
vt 0.875000 0.687500
|
||||
vt 0.875000 0.375000
|
||||
vt 0.875000 0.437500
|
||||
vt 0.875000 0.500000
|
||||
vt 0.875000 0.562500
|
||||
vt 0.937500 0.625000
|
||||
vt 0.937500 0.687500
|
||||
vt 0.937500 0.375000
|
||||
vt 0.937500 0.437500
|
||||
vt 0.937500 0.500000
|
||||
vt 0.937500 0.562500
|
||||
vt 1.000000 0.625000
|
||||
vt 1.000000 0.687500
|
||||
vt 1.000000 0.375000
|
||||
vt 1.000000 0.437500
|
||||
vt 1.000000 0.500000
|
||||
vt 1.000000 0.562500
|
||||
vt 0.500000 0.625000
|
||||
vt 0.562500 0.625000
|
||||
vt 0.562500 0.687500
|
||||
vt 0.500000 0.687500
|
||||
vt 0.562500 0.375000
|
||||
vt 0.562500 0.437500
|
||||
vt 0.500000 0.437500
|
||||
vt 0.562500 0.500000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.562500 0.562500
|
||||
vt 0.500000 0.562500
|
||||
vt 0.625000 0.625000
|
||||
vt 0.625000 0.687500
|
||||
vt 0.625000 0.375000
|
||||
vt 0.625000 0.437500
|
||||
vt 0.625000 0.500000
|
||||
vt 0.625000 0.562500
|
||||
vt 0.687500 0.625000
|
||||
vt 0.687500 0.687500
|
||||
vt 0.687500 0.375000
|
||||
vt 0.687500 0.437500
|
||||
vt 0.687500 0.500000
|
||||
vt 0.687500 0.562500
|
||||
vt 0.250000 0.625000
|
||||
vt 0.312500 0.625000
|
||||
vt 0.312500 0.687500
|
||||
vt 0.250000 0.687500
|
||||
vt 0.312500 0.437500
|
||||
vt 0.250000 0.437500
|
||||
vt 0.312500 0.500000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.312500 0.562500
|
||||
vt 0.250000 0.562500
|
||||
vt 0.375000 0.625000
|
||||
vt 0.375000 0.687500
|
||||
vt 0.375000 0.437500
|
||||
vt 0.375000 0.500000
|
||||
vt 0.375000 0.562500
|
||||
vt 0.437500 0.625000
|
||||
vt 0.437500 0.687500
|
||||
vt 0.437500 0.437500
|
||||
vt 0.437500 0.500000
|
||||
vt 0.437500 0.562500
|
||||
vt -0.000000 0.625000
|
||||
vt 0.062500 0.625000
|
||||
vt 0.062500 0.687500
|
||||
vt -0.000000 0.687500
|
||||
vt 0.062500 0.437500
|
||||
vt -0.000000 0.437500
|
||||
vt 0.062500 0.500000
|
||||
vt -0.000000 0.500000
|
||||
vt 0.062500 0.562500
|
||||
vt -0.000000 0.562500
|
||||
vt 0.125000 0.625000
|
||||
vt 0.125000 0.687500
|
||||
vt 0.125000 0.437500
|
||||
vt 0.125000 0.500000
|
||||
vt 0.125000 0.562500
|
||||
vt 0.187500 0.625000
|
||||
vt 0.187500 0.687500
|
||||
vt 0.187500 0.437500
|
||||
vt 0.187500 0.500000
|
||||
vt 0.187500 0.562500
|
||||
vt 0.687500 0.750000
|
||||
vt 0.750000 0.750000
|
||||
vt 0.750000 0.812500
|
||||
vt 0.687500 0.812500
|
||||
vt 0.750000 0.875000
|
||||
vt 0.687500 0.875000
|
||||
vt 0.750000 0.937500
|
||||
vt 0.687500 0.937500
|
||||
vt 0.750000 1.000000
|
||||
vt 0.687500 1.000000
|
||||
vt 0.812500 0.750000
|
||||
vt 0.812500 0.812500
|
||||
vt 0.812500 0.875000
|
||||
vt 0.812500 0.937500
|
||||
vt 0.812500 1.000000
|
||||
vt 0.875000 0.750000
|
||||
vt 0.875000 0.812500
|
||||
vt 0.875000 0.875000
|
||||
vt 0.875000 0.937500
|
||||
vt 0.875000 1.000000
|
||||
vt 0.937500 0.750000
|
||||
vt 0.937500 0.812500
|
||||
vt 0.937500 0.875000
|
||||
vt 0.937500 0.937500
|
||||
vt 0.937500 1.000000
|
||||
vt 1.000000 0.750000
|
||||
vt 1.000000 0.812500
|
||||
vt 1.000000 0.875000
|
||||
vt 1.000000 0.937500
|
||||
vt 1.000000 1.000000
|
||||
vt 0.500000 0.750000
|
||||
vt 0.562500 0.750000
|
||||
vt 0.562500 0.812500
|
||||
vt 0.500000 0.812500
|
||||
vt 0.562500 0.875000
|
||||
vt 0.500000 0.875000
|
||||
vt 0.562500 0.937500
|
||||
vt 0.500000 0.937500
|
||||
vt 0.562500 1.000000
|
||||
vt 0.500000 1.000000
|
||||
vt 0.625000 0.750000
|
||||
vt 0.625000 0.812500
|
||||
vt 0.625000 0.875000
|
||||
vt 0.625000 0.937500
|
||||
vt 0.625000 1.000000
|
||||
vt 0.750000 0.312500
|
||||
vt 0.812500 0.312500
|
||||
vt 0.750000 0.062500
|
||||
vt 0.812500 0.062500
|
||||
vt 0.812500 0.125000
|
||||
vt 0.750000 0.125000
|
||||
vt 0.812500 0.187500
|
||||
vt 0.750000 0.187500
|
||||
vt 0.812500 0.250000
|
||||
vt 0.750000 0.250000
|
||||
vt 0.875000 0.312500
|
||||
vt 0.875000 0.062500
|
||||
vt 0.875000 0.125000
|
||||
vt 0.875000 0.187500
|
||||
vt 0.875000 0.250000
|
||||
vt 0.937500 0.312500
|
||||
vt 0.937500 0.062500
|
||||
vt 0.937500 0.125000
|
||||
vt 0.937500 0.187500
|
||||
vt 0.937500 0.250000
|
||||
vt 1.000000 0.312500
|
||||
vt 1.000000 0.062500
|
||||
vt 1.000000 0.125000
|
||||
vt 1.000000 0.187500
|
||||
vt 1.000000 0.250000
|
||||
vt 0.562500 0.312500
|
||||
vt 0.562500 0.062500
|
||||
vt 0.562500 0.125000
|
||||
vt 0.562500 0.187500
|
||||
vt 0.562500 0.250000
|
||||
vt 0.625000 0.312500
|
||||
vt 0.625000 0.062500
|
||||
vt 0.625000 0.125000
|
||||
vt 0.625000 0.187500
|
||||
vt 0.625000 0.250000
|
||||
vt 0.687500 0.312500
|
||||
vt 0.687500 0.062500
|
||||
vt 0.687500 0.125000
|
||||
vt 0.687500 0.187500
|
||||
vt 0.687500 0.250000
|
||||
vt 0.250000 0.937500
|
||||
vt 0.312500 0.937500
|
||||
vt 0.312500 1.000000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.312500 0.750000
|
||||
vt 0.250000 0.750000
|
||||
vt 0.312500 0.812500
|
||||
vt 0.250000 0.812500
|
||||
vt 0.312500 0.875000
|
||||
vt 0.250000 0.875000
|
||||
vt 0.375000 0.937500
|
||||
vt 0.375000 1.000000
|
||||
vt 0.375000 0.750000
|
||||
vt 0.375000 0.812500
|
||||
vt 0.375000 0.875000
|
||||
vt 0.437500 0.937500
|
||||
vt 0.437500 1.000000
|
||||
vt 0.437500 0.750000
|
||||
vt 0.437500 0.812500
|
||||
vt 0.437500 0.875000
|
||||
vt 0.000000 0.937500
|
||||
vt 0.062500 0.937500
|
||||
vt 0.062500 1.000000
|
||||
vt 0.000000 1.000000
|
||||
vt 0.062500 0.750000
|
||||
vt 0.000000 0.750000
|
||||
vt 0.062500 0.812500
|
||||
vt 0.000000 0.812500
|
||||
vt 0.062500 0.875000
|
||||
vt 0.000000 0.875000
|
||||
vt 0.125000 0.937500
|
||||
vt 0.125000 1.000000
|
||||
vt 0.125000 0.750000
|
||||
vt 0.125000 0.812500
|
||||
vt 0.125000 0.875000
|
||||
vt 0.187500 0.937500
|
||||
vt 0.187500 1.000000
|
||||
vt 0.187500 0.750000
|
||||
vt 0.187500 0.812500
|
||||
vt 0.187500 0.875000
|
||||
vn 0.000000 -1.000000 -0.004800
|
||||
vn 0.000000 -0.657400 0.753500
|
||||
vn -0.898300 -0.248500 0.362300
|
||||
vn -0.863600 -0.504100 -0.003400
|
||||
vn -0.661500 0.421500 -0.620200
|
||||
vn -0.746000 0.665900 0.000000
|
||||
vn 0.661500 0.421500 -0.620200
|
||||
vn 0.746000 0.665900 0.000000
|
||||
vn 0.898300 -0.248500 0.362300
|
||||
vn 0.863600 -0.504100 -0.003400
|
||||
vn 0.000000 0.000000 1.000000
|
||||
vn -0.925200 0.000000 0.379500
|
||||
vn -0.617100 0.000000 -0.786900
|
||||
vn 0.617100 0.000000 -0.786900
|
||||
vn 0.925200 0.000000 0.379500
|
||||
vn 0.000000 0.657400 0.753500
|
||||
vn -0.898300 0.248400 0.362300
|
||||
vn -0.661500 -0.421500 -0.620200
|
||||
vn 0.661500 -0.421500 -0.620200
|
||||
vn 0.898300 0.248400 0.362300
|
||||
vn 0.000000 1.000000 0.000000
|
||||
vn -0.866100 0.499800 0.000000
|
||||
vn -0.746000 -0.665900 0.000000
|
||||
vn 0.746000 -0.665900 0.000000
|
||||
vn 0.866100 0.499800 0.000000
|
||||
vn 0.000000 0.657400 -0.753500
|
||||
vn -0.898300 0.248400 -0.362400
|
||||
vn -0.661600 -0.421500 0.620200
|
||||
vn 0.661500 -0.421500 0.620200
|
||||
vn 0.898300 0.248400 -0.362300
|
||||
vn 0.000000 -0.000900 -1.000000
|
||||
vn -0.924600 -0.000600 -0.380700
|
||||
vn -0.617100 0.000000 0.786900
|
||||
vn 0.617100 0.000000 0.786900
|
||||
vn 0.924700 -0.000600 -0.380700
|
||||
vn 0.000000 -0.650300 -0.759600
|
||||
vn -0.895600 -0.254600 -0.364800
|
||||
vn -0.661600 0.421500 0.620200
|
||||
vn 0.661600 0.421500 0.620200
|
||||
vn 0.895600 -0.254600 -0.364800
|
||||
vn 0.004900 -1.000000 0.000000
|
||||
vn -0.729700 -0.683800 0.000000
|
||||
vn -0.324500 -0.256300 -0.910500
|
||||
vn 0.003300 -0.475500 -0.879700
|
||||
vn 0.578700 0.436200 -0.689100
|
||||
vn 0.000000 0.666600 -0.745400
|
||||
vn 0.578700 0.436200 0.689100
|
||||
vn 0.000000 0.666600 0.745400
|
||||
vn -0.324500 -0.256300 0.910500
|
||||
vn 0.003300 -0.475500 0.879700
|
||||
vn -1.000000 0.000000 0.000000
|
||||
vn -0.359600 0.000000 -0.933100
|
||||
vn 0.756400 0.000000 -0.654100
|
||||
vn 0.756400 0.000000 0.654100
|
||||
vn -0.359600 0.000000 0.933100
|
||||
vn -0.729700 0.683700 0.000000
|
||||
vn -0.324500 0.256300 -0.910500
|
||||
vn 0.578700 -0.436200 -0.689100
|
||||
vn 0.578700 -0.436200 0.689100
|
||||
vn -0.324500 0.256300 0.910500
|
||||
vn 0.000000 0.470900 -0.882200
|
||||
vn 0.000000 -0.666600 -0.745400
|
||||
vn 0.000000 -0.666600 0.745400
|
||||
vn 0.000000 0.470900 0.882200
|
||||
vn 0.729700 0.683700 0.000000
|
||||
vn 0.324500 0.256300 -0.910500
|
||||
vn -0.578700 -0.436200 -0.689100
|
||||
vn -0.578700 -0.436200 0.689100
|
||||
vn 0.324500 0.256300 0.910500
|
||||
vn 1.000000 -0.001100 0.000000
|
||||
vn 0.361000 -0.000700 -0.932600
|
||||
vn -0.756400 0.000000 -0.654100
|
||||
vn -0.756400 0.000000 0.654100
|
||||
vn 0.361000 -0.000700 0.932600
|
||||
vn 0.736100 -0.676800 0.000000
|
||||
vn 0.327100 -0.263100 -0.907600
|
||||
vn -0.578700 0.436200 -0.689100
|
||||
vn -0.578700 0.436200 0.689100
|
||||
vn 0.327100 -0.263100 0.907600
|
||||
vn -0.004900 -1.000000 0.000000
|
||||
vn 0.729700 -0.683800 0.000000
|
||||
vn 0.324500 -0.256300 0.910500
|
||||
vn -0.003300 -0.475400 0.879700
|
||||
vn 0.324500 -0.256300 -0.910500
|
||||
vn -0.003300 -0.475400 -0.879700
|
||||
vn 1.000000 0.000000 0.000000
|
||||
vn 0.359600 0.000000 0.933100
|
||||
vn 0.359600 0.000000 -0.933100
|
||||
vn -1.000000 -0.001100 0.000000
|
||||
vn -0.361000 -0.000700 0.932600
|
||||
vn -0.361000 -0.000700 -0.932600
|
||||
vn -0.736100 -0.676800 0.000000
|
||||
vn -0.327100 -0.263100 0.907600
|
||||
vn -0.327100 -0.263100 -0.907600
|
||||
vn 0.000000 -1.000000 0.004800
|
||||
vn 0.000000 -0.657400 -0.753500
|
||||
vn 0.898300 -0.248500 -0.362400
|
||||
vn 0.863600 -0.504100 0.003400
|
||||
vn -0.898300 -0.248500 -0.362400
|
||||
vn -0.863600 -0.504100 0.003400
|
||||
vn 0.000000 0.000000 -1.000000
|
||||
vn 0.925200 0.000000 -0.379500
|
||||
vn -0.925200 0.000000 -0.379500
|
||||
vn 0.898300 0.248500 -0.362400
|
||||
vn 0.661600 -0.421500 0.620200
|
||||
vn -0.898300 0.248500 -0.362400
|
||||
vn 0.898300 0.248500 0.362300
|
||||
vn -0.898300 0.248500 0.362300
|
||||
vn 0.000000 -0.000900 1.000000
|
||||
vn 0.924700 -0.000600 0.380700
|
||||
vn -0.924700 -0.000600 0.380700
|
||||
vn 0.000000 -0.650300 0.759600
|
||||
vn 0.895600 -0.254600 0.364700
|
||||
vn -0.895600 -0.254600 0.364700
|
||||
vn 0.729700 -0.683700 0.000000
|
||||
vn 0.729700 0.683800 0.000000
|
||||
vn -0.729700 0.683800 0.000000
|
||||
vn -0.898300 -0.248400 0.362300
|
||||
vn -0.863600 -0.504100 -0.003500
|
||||
vn 0.898300 -0.248400 0.362300
|
||||
vn 0.863600 -0.504100 -0.003500
|
||||
vn -0.661500 -0.421500 0.620200
|
||||
vn 0.924600 -0.000600 -0.380700
|
||||
vn -0.661500 0.421500 0.620200
|
||||
vn 0.661500 0.421500 0.620200
|
||||
s 1
|
||||
f 1/1/1 2/2/2 3/3/3 4/4/4
|
||||
f 4/4/4 3/3/3 5/5/5 6/6/6
|
||||
f 6/6/6 5/5/5 7/7/7 8/8/8
|
||||
f 8/8/8 7/7/7 9/9/9 10/10/10
|
||||
f 1/1/1 10/11/10 9/12/9 2/2/2
|
||||
f 2/2/2 11/13/11 12/14/12 3/3/3
|
||||
f 3/3/3 12/14/12 13/15/13 5/5/5
|
||||
f 5/5/5 13/15/13 14/16/14 7/7/7
|
||||
f 7/7/7 14/16/14 15/17/15 9/9/9
|
||||
f 9/12/9 15/18/15 11/13/11 2/2/2
|
||||
f 11/13/11 16/19/16 17/20/17 12/14/12
|
||||
f 12/14/12 17/20/17 18/21/18 13/15/13
|
||||
f 13/15/13 18/21/18 19/22/19 14/16/14
|
||||
f 14/16/14 19/22/19 20/23/20 15/17/15
|
||||
f 15/18/15 20/24/20 16/19/16 11/13/11
|
||||
f 16/19/16 21/25/21 22/26/22 17/20/17
|
||||
f 17/20/17 22/26/22 23/27/23 18/21/18
|
||||
f 18/21/18 23/27/23 24/28/24 19/22/19
|
||||
f 19/22/19 24/28/24 25/29/25 20/23/20
|
||||
f 20/24/20 25/30/25 21/25/21 16/19/16
|
||||
f 21/25/21 26/31/26 27/32/27 22/26/22
|
||||
f 22/26/22 27/32/27 28/33/28 23/27/23
|
||||
f 23/27/23 28/33/28 29/34/29 24/28/24
|
||||
f 24/28/24 29/34/29 30/35/30 25/29/25
|
||||
f 25/30/25 30/36/30 26/31/26 21/25/21
|
||||
f 26/37/26 31/38/31 32/39/32 27/40/27
|
||||
f 27/40/27 32/39/32 33/41/33 28/42/28
|
||||
f 28/42/28 33/41/33 34/43/34 29/44/29
|
||||
f 29/44/29 34/43/34 35/45/35 30/46/30
|
||||
f 30/47/30 35/48/35 31/38/31 26/37/26
|
||||
f 31/38/31 36/49/36 37/50/37 32/39/32
|
||||
f 32/39/32 37/50/37 38/51/38 33/41/33
|
||||
f 33/41/33 38/51/38 39/52/39 34/43/34
|
||||
f 34/43/34 39/52/39 40/53/40 35/45/35
|
||||
f 35/48/35 40/54/40 36/49/36 31/38/31
|
||||
f 36/49/36 1/1/1 4/4/4 37/50/37
|
||||
f 37/50/37 4/4/4 6/6/6 38/51/38
|
||||
f 38/51/38 6/6/6 8/8/8 39/52/39
|
||||
f 39/52/39 8/8/8 10/10/10 40/53/40
|
||||
f 1/1/1 36/49/36 40/54/40 10/11/10
|
||||
f 41/55/41 42/56/42 43/57/43 44/58/44
|
||||
f 44/59/44 43/60/43 45/61/45 46/62/46
|
||||
f 46/62/46 45/61/45 47/63/47 48/64/48
|
||||
f 48/64/48 47/63/47 49/65/49 50/66/50
|
||||
f 41/55/41 50/66/50 49/65/49 42/56/42
|
||||
f 42/56/42 51/67/51 52/68/52 43/57/43
|
||||
f 43/60/43 52/69/52 53/70/53 45/61/45
|
||||
f 45/61/45 53/70/53 54/71/54 47/63/47
|
||||
f 47/63/47 54/71/54 55/72/55 49/65/49
|
||||
f 49/65/49 55/72/55 51/67/51 42/56/42
|
||||
f 51/67/51 56/73/56 57/74/57 52/68/52
|
||||
f 52/69/52 57/75/57 58/76/58 53/70/53
|
||||
f 53/70/53 58/76/58 59/77/59 54/71/54
|
||||
f 54/71/54 59/77/59 60/78/60 55/72/55
|
||||
f 55/72/55 60/78/60 56/73/56 51/67/51
|
||||
f 56/73/56 61/79/21 62/80/61 57/74/57
|
||||
f 57/75/57 62/81/61 63/82/62 58/76/58
|
||||
f 58/76/58 63/82/62 64/83/63 59/77/59
|
||||
f 59/77/59 64/83/63 65/84/64 60/78/60
|
||||
f 60/78/60 65/84/64 61/79/21 56/73/56
|
||||
f 61/85/21 66/86/65 67/87/66 62/88/61
|
||||
f 62/35/61 67/89/66 68/90/67 63/91/62
|
||||
f 63/91/62 68/90/67 69/92/68 64/93/63
|
||||
f 64/93/63 69/92/68 70/94/69 65/95/64
|
||||
f 65/95/64 70/94/69 66/86/65 61/85/21
|
||||
f 66/86/65 71/96/70 72/97/71 67/87/66
|
||||
f 67/89/66 72/98/71 73/99/72 68/90/67
|
||||
f 68/90/67 73/99/72 74/100/73 69/92/68
|
||||
f 69/92/68 74/100/73 75/101/74 70/94/69
|
||||
f 70/94/69 75/101/74 71/96/70 66/86/65
|
||||
f 71/96/70 76/102/75 77/103/76 72/97/71
|
||||
f 72/98/71 77/104/76 78/105/77 73/99/72
|
||||
f 73/99/72 78/105/77 79/106/78 74/100/73
|
||||
f 74/100/73 79/106/78 80/107/79 75/101/74
|
||||
f 75/101/74 80/107/79 76/102/75 71/96/70
|
||||
f 76/102/75 41/55/41 44/58/44 77/103/76
|
||||
f 77/104/76 44/59/44 46/62/46 78/105/77
|
||||
f 78/105/77 46/62/46 48/64/48 79/106/78
|
||||
f 79/106/78 48/64/48 50/66/50 80/107/79
|
||||
f 41/55/41 76/102/75 80/107/79 50/66/50
|
||||
f 81/108/80 82/109/81 83/110/82 84/111/83
|
||||
f 84/9/83 83/17/82 85/112/78 86/113/48
|
||||
f 86/113/48 85/112/78 87/114/77 88/115/46
|
||||
f 88/115/46 87/114/77 89/116/84 90/117/85
|
||||
f 81/108/80 90/117/85 89/116/84 82/109/81
|
||||
f 82/109/81 91/118/86 92/119/87 83/110/82
|
||||
f 83/17/82 92/23/87 93/120/73 85/112/78
|
||||
f 85/112/78 93/120/73 94/121/72 87/114/77
|
||||
f 87/114/77 94/121/72 95/122/88 89/116/84
|
||||
f 89/116/84 95/122/88 91/118/86 82/109/81
|
||||
f 91/118/86 96/123/65 97/124/69 92/119/87
|
||||
f 92/23/87 97/29/69 98/125/68 93/120/73
|
||||
f 93/120/73 98/125/68 99/126/67 94/121/72
|
||||
f 94/121/72 99/126/67 100/127/66 95/122/88
|
||||
f 95/122/88 100/127/66 96/123/65 91/118/86
|
||||
f 96/123/65 101/85/21 102/88/64 97/124/69
|
||||
f 97/29/69 102/35/64 103/91/63 98/125/68
|
||||
f 98/125/68 103/91/63 104/93/62 99/126/67
|
||||
f 99/126/67 104/93/62 105/95/61 100/127/66
|
||||
f 100/127/66 105/95/61 101/85/21 96/123/65
|
||||
f 101/128/21 106/129/56 107/130/60 102/131/64
|
||||
f 102/46/64 107/45/60 108/132/59 103/133/63
|
||||
f 103/133/63 108/132/59 109/134/58 104/135/62
|
||||
f 104/135/62 109/134/58 110/136/57 105/137/61
|
||||
f 105/137/61 110/136/57 106/129/56 101/128/21
|
||||
f 106/129/56 111/138/89 112/139/90 107/130/60
|
||||
f 107/45/60 112/53/90 113/140/54 108/132/59
|
||||
f 108/132/59 113/140/54 114/141/53 109/134/58
|
||||
f 109/134/58 114/141/53 115/142/91 110/136/57
|
||||
f 110/136/57 115/142/91 111/138/89 106/129/56
|
||||
f 111/138/89 116/143/92 117/144/93 112/139/90
|
||||
f 112/53/90 117/10/93 118/145/47 113/140/54
|
||||
f 113/140/54 118/145/47 119/146/45 114/141/53
|
||||
f 114/141/53 119/146/45 120/147/94 115/142/91
|
||||
f 115/142/91 120/147/94 116/143/92 111/138/89
|
||||
f 116/143/92 81/108/80 84/111/83 117/144/93
|
||||
f 117/10/93 84/9/83 86/113/48 118/145/47
|
||||
f 118/145/47 86/113/48 88/115/46 119/146/45
|
||||
f 119/146/45 88/115/46 90/117/85 120/147/94
|
||||
f 81/108/80 116/143/92 120/147/94 90/117/85
|
||||
f 121/148/95 122/149/96 123/150/97 124/151/98
|
||||
f 124/151/98 123/150/97 125/152/39 126/153/8
|
||||
f 126/153/8 125/152/39 127/154/38 128/155/6
|
||||
f 128/155/6 127/154/38 129/156/99 130/157/100
|
||||
f 121/148/95 130/103/100 129/58/99 122/149/96
|
||||
f 122/149/96 131/158/101 132/159/102 123/150/97
|
||||
f 123/150/97 132/159/102 133/160/34 125/152/39
|
||||
f 125/152/39 133/160/34 134/161/33 127/154/38
|
||||
f 127/154/38 134/161/33 135/162/103 129/156/99
|
||||
f 129/58/99 135/57/103 131/158/101 122/149/96
|
||||
f 131/158/101 136/163/26 137/164/104 132/159/102
|
||||
f 132/159/102 137/164/104 138/165/105 133/160/34
|
||||
f 133/160/34 138/165/105 139/166/28 134/161/33
|
||||
f 134/161/33 139/166/28 140/167/106 135/162/103
|
||||
f 135/57/103 140/68/106 136/163/26 131/158/101
|
||||
f 136/163/26 141/168/21 142/169/25 137/164/104
|
||||
f 137/164/104 142/169/25 143/170/24 138/165/105
|
||||
f 138/165/105 143/170/24 144/171/23 139/166/28
|
||||
f 139/166/28 144/171/23 145/172/22 140/167/106
|
||||
f 140/68/106 145/74/22 141/168/21 136/163/26
|
||||
f 141/168/21 146/173/16 147/174/107 142/169/25
|
||||
f 142/169/25 147/174/107 148/175/19 143/170/24
|
||||
f 143/170/24 148/175/19 149/176/18 144/171/23
|
||||
f 144/171/23 149/176/18 150/177/108 145/172/22
|
||||
f 145/74/22 150/80/108 146/173/16 141/168/21
|
||||
f 146/178/16 151/179/109 152/180/110 147/181/107
|
||||
f 147/181/107 152/180/110 153/182/14 148/183/19
|
||||
f 148/183/19 153/182/14 154/184/13 149/185/18
|
||||
f 149/185/18 154/184/13 155/186/111 150/187/108
|
||||
f 150/88/108 155/87/111 151/179/109 146/178/16
|
||||
f 151/179/109 156/188/112 157/189/113 152/180/110
|
||||
f 152/180/110 157/189/113 158/190/7 153/182/14
|
||||
f 153/182/14 158/190/7 159/191/5 154/184/13
|
||||
f 154/184/13 159/191/5 160/192/114 155/186/111
|
||||
f 155/87/111 160/97/114 156/188/112 151/179/109
|
||||
f 156/188/112 121/148/95 124/151/98 157/189/113
|
||||
f 157/189/113 124/151/98 126/153/8 158/190/7
|
||||
f 158/190/7 126/153/8 128/155/6 159/191/5
|
||||
f 159/191/5 128/155/6 130/157/100 160/192/114
|
||||
f 121/148/95 156/188/112 160/97/114 130/103/100
|
||||
f 161/193/80 162/194/115 163/60/82 164/59/83
|
||||
f 164/195/83 163/196/82 165/197/78 166/198/48
|
||||
f 166/198/48 165/197/78 167/199/77 168/200/46
|
||||
f 168/200/46 167/199/77 169/201/84 170/202/85
|
||||
f 161/193/80 170/202/85 169/201/84 162/194/115
|
||||
f 162/194/115 171/203/86 172/69/87 163/60/82
|
||||
f 163/196/82 172/204/87 173/205/73 165/197/78
|
||||
f 165/197/78 173/205/73 174/206/72 167/199/77
|
||||
f 167/199/77 174/206/72 175/207/88 169/201/84
|
||||
f 169/201/84 175/207/88 171/203/86 162/194/115
|
||||
f 171/203/86 176/208/116 177/75/69 172/69/87
|
||||
f 172/204/87 177/209/69 178/210/68 173/205/73
|
||||
f 173/205/73 178/210/68 179/211/67 174/206/72
|
||||
f 174/206/72 179/211/67 180/212/66 175/207/88
|
||||
f 175/207/88 180/212/66 176/208/116 171/203/86
|
||||
f 176/208/116 181/213/21 182/81/64 177/75/69
|
||||
f 177/209/69 182/214/64 183/215/63 178/210/68
|
||||
f 178/210/68 183/215/63 184/216/62 179/211/67
|
||||
f 179/211/67 184/216/62 185/217/61 180/212/66
|
||||
f 180/212/66 185/217/61 181/213/21 176/208/116
|
||||
f 181/34/21 186/218/117 187/89/60 182/35/64
|
||||
f 182/36/64 187/219/60 188/220/59 183/31/63
|
||||
f 183/31/63 188/220/59 189/221/58 184/32/62
|
||||
f 184/32/62 189/221/58 190/222/57 185/33/61
|
||||
f 185/33/61 190/222/57 186/218/117 181/34/21
|
||||
f 186/218/117 191/223/89 192/98/90 187/89/60
|
||||
f 187/219/60 192/224/90 193/225/54 188/220/59
|
||||
f 188/220/59 193/225/54 194/226/53 189/221/58
|
||||
f 189/221/58 194/226/53 195/227/91 190/222/57
|
||||
f 190/222/57 195/227/91 191/223/89 186/218/117
|
||||
f 191/223/89 196/228/92 197/104/93 192/98/90
|
||||
f 192/224/90 197/229/93 198/230/47 193/225/54
|
||||
f 193/225/54 198/230/47 199/231/45 194/226/53
|
||||
f 194/226/53 199/231/45 200/232/94 195/227/91
|
||||
f 195/227/91 200/232/94 196/228/92 191/223/89
|
||||
f 196/228/92 161/193/80 164/59/83 197/104/93
|
||||
f 197/229/93 164/195/83 166/198/48 198/230/47
|
||||
f 198/230/47 166/198/48 168/200/46 199/231/45
|
||||
f 199/231/45 168/200/46 170/202/85 200/232/94
|
||||
f 161/193/80 196/228/92 200/232/94 170/202/85
|
||||
f 201/233/1 202/234/2 203/235/118 204/236/119
|
||||
f 204/111/119 203/110/118 205/237/5 206/238/6
|
||||
f 206/238/6 205/237/5 207/239/7 208/240/8
|
||||
f 208/240/8 207/239/7 209/241/120 210/242/121
|
||||
f 201/233/1 210/242/121 209/241/120 202/234/2
|
||||
f 202/234/2 211/243/11 212/244/12 203/235/118
|
||||
f 203/110/118 212/119/12 213/245/13 205/237/5
|
||||
f 205/237/5 213/245/13 214/246/14 207/239/7
|
||||
f 207/239/7 214/246/14 215/247/15 209/241/120
|
||||
f 209/241/120 215/247/15 211/243/11 202/234/2
|
||||
f 211/243/11 216/248/16 217/249/108 212/244/12
|
||||
f 212/119/12 217/124/108 218/250/18 213/245/13
|
||||
f 213/245/13 218/250/18 219/251/19 214/246/14
|
||||
f 214/246/14 219/251/19 220/252/107 215/247/15
|
||||
f 215/247/15 220/252/107 216/248/16 211/243/11
|
||||
f 216/248/16 221/185/21 222/187/22 217/249/108
|
||||
f 217/124/108 222/88/22 223/178/23 218/250/18
|
||||
f 218/250/18 223/178/23 224/181/24 219/251/19
|
||||
f 219/251/19 224/181/24 225/183/25 220/252/107
|
||||
f 220/252/107 225/183/25 221/185/21 216/248/16
|
||||
f 221/253/21 226/254/26 227/255/106 222/256/22
|
||||
f 222/131/22 227/130/106 228/257/122 223/258/23
|
||||
f 223/258/23 228/257/122 229/259/29 224/260/24
|
||||
f 224/260/24 229/259/29 230/261/104 225/262/25
|
||||
f 225/262/25 230/261/104 226/254/26 221/253/21
|
||||
f 226/254/26 231/263/31 232/264/32 227/255/106
|
||||
f 227/130/106 232/139/32 233/265/33 228/257/122
|
||||
f 228/257/122 233/265/33 234/266/34 229/259/29
|
||||
f 229/259/29 234/266/34 235/267/123 230/261/104
|
||||
f 230/261/104 235/267/123 231/263/31 226/254/26
|
||||
f 231/263/31 236/268/36 237/269/37 232/264/32
|
||||
f 232/139/32 237/144/37 238/270/124 233/265/33
|
||||
f 233/265/33 238/270/124 239/271/125 234/266/34
|
||||
f 234/266/34 239/271/125 240/272/40 235/267/123
|
||||
f 235/267/123 240/272/40 236/268/36 231/263/31
|
||||
f 236/268/36 201/233/1 204/236/119 237/269/37
|
||||
f 237/144/37 204/111/119 206/238/6 238/270/124
|
||||
f 238/270/124 206/238/6 208/240/8 239/271/125
|
||||
f 239/271/125 208/240/8 210/242/121 240/272/40
|
||||
f 201/233/1 236/268/36 240/272/40 210/242/121
|
||||
@@ -0,0 +1,62 @@
|
||||
local S = minetest.get_translator("basic_materials")
|
||||
local sound_api = xcompat.sounds
|
||||
local chains_sbox = {type = "fixed",fixed = { -0.1, -0.5, -0.1, 0.1, 0.5, 0.1 }}
|
||||
|
||||
minetest.register_node("basic_materials:cement_block", {
|
||||
description = S("Cement"),
|
||||
tiles = {"basic_materials_cement_block.png"},
|
||||
is_ground_content = false,
|
||||
groups = {cracky=2, dig_stone = 1, pickaxey=5},
|
||||
_mcl_hardness=1.6,
|
||||
sounds = sound_api.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("basic_materials:concrete_block", {
|
||||
description = S("Concrete Block"),
|
||||
tiles = {"basic_materials_concrete_block.png",},
|
||||
is_ground_content = false,
|
||||
groups = {cracky=1, concrete=1, dig_stone = 1, pickaxey=5},
|
||||
_mcl_hardness=1.6,
|
||||
sounds = sound_api.node_sound_stone_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("basic_materials:chain_steel", {
|
||||
description = S("Chain (steel, hanging)"),
|
||||
drawtype = "mesh",
|
||||
mesh = "basic_materials_chains.obj",
|
||||
tiles = {"basic_materials_chain_steel.png"},
|
||||
walkable = false,
|
||||
climbable = true,
|
||||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
inventory_image = "basic_materials_chain_steel_inv.png",
|
||||
is_ground_content = false,
|
||||
groups = {cracky=3, dig_stone = 1, pickaxey=5},
|
||||
_mcl_hardness=1.6,
|
||||
selection_box = chains_sbox,
|
||||
})
|
||||
|
||||
minetest.register_node("basic_materials:chain_brass", {
|
||||
description = S("Chain (brass, hanging)"),
|
||||
drawtype = "mesh",
|
||||
mesh = "basic_materials_chains.obj",
|
||||
tiles = {"basic_materials_chain_brass.png"},
|
||||
walkable = false,
|
||||
climbable = true,
|
||||
sunlight_propagates = true,
|
||||
paramtype = "light",
|
||||
inventory_image = "basic_materials_chain_brass_inv.png",
|
||||
is_ground_content = false,
|
||||
groups = {cracky=3, dig_stone = 1, pickaxey=5},
|
||||
_mcl_hardness=1.6,
|
||||
selection_box = chains_sbox,
|
||||
})
|
||||
|
||||
minetest.register_node("basic_materials:brass_block", {
|
||||
description = S("Brass Block"),
|
||||
tiles = { "basic_materials_brass_block.png" },
|
||||
is_ground_content = false,
|
||||
groups = {cracky=1, dig_stone = 1, pickaxey=5},
|
||||
_mcl_hardness=1.6,
|
||||
sounds = sound_api.node_sound_metal_defaults()
|
||||
})
|
||||
|
After Width: | Height: | Size: 337 B |
|
After Width: | Height: | Size: 383 B |
|
After Width: | Height: | Size: 258 B |
|
After Width: | Height: | Size: 272 B |
|
After Width: | Height: | Size: 223 B |
|
After Width: | Height: | Size: 292 B |
|
After Width: | Height: | Size: 243 B |
|
After Width: | Height: | Size: 344 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 386 B |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 178 B |
|
After Width: | Height: | Size: 175 B |
|
After Width: | Height: | Size: 252 B |
|
After Width: | Height: | Size: 326 B |
|
After Width: | Height: | Size: 306 B |
|
After Width: | Height: | Size: 214 B |
|
After Width: | Height: | Size: 817 B |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 358 B |
|
After Width: | Height: | Size: 286 B |
|
After Width: | Height: | Size: 369 B |
|
After Width: | Height: | Size: 293 B |
|
After Width: | Height: | Size: 366 B |
|
After Width: | Height: | Size: 247 B |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 215 B |
|
After Width: | Height: | Size: 345 B |
|
After Width: | Height: | Size: 293 B |
|
After Width: | Height: | Size: 160 B |
|
After Width: | Height: | Size: 769 B |
|
After Width: | Height: | Size: 251 B |
|
After Width: | Height: | Size: 336 B |
|
After Width: | Height: | Size: 382 B |
|
After Width: | Height: | Size: 280 B |
|
After Width: | Height: | Size: 311 B |
|
After Width: | Height: | Size: 326 B |
|
After Width: | Height: | Size: 284 B |
|
After Width: | Height: | Size: 775 B |
|
After Width: | Height: | Size: 366 B |
@@ -0,0 +1,2 @@
|
||||
# Backup files
|
||||
*~
|
||||
@@ -0,0 +1,19 @@
|
||||
License for Code
|
||||
----------------
|
||||
|
||||
Copyright (C) 2016 cdqwertz <cdqwertz@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
http://www.gnu.org/licenses/lgpl-2.1.html
|
||||
|
||||
License for Media
|
||||
-----------------
|
||||
|
||||
CC-BY-SA 3.0 UNPORTED. Created by cdqwertz
|
||||
|
||||
Note: screenshot.png contains textures from minetest_game.
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# Compost Mod
|
||||
With this mod, you are able to compost grass, leaves, flowers...
|
||||
|
||||
Adapted to techage/minecart by joe7575
|
||||
|
||||
|
||||
## License
|
||||
see LICENSE.txt
|
||||
|
||||
## Crafting
|
||||
Wood barrel:
|
||||
|
||||
| W | | W |
|
||||
|---|---|---|
|
||||
| W | | W |
|
||||
| W | S | W |
|
||||
|
||||
W : wood
|
||||
S : wood slab
|
||||
|
||||
## Bugs
|
||||
Report bugs on the forum topic or open a issue on GitHub.
|
||||
|
||||
## created by
|
||||
cdqwertz - cdqwertz.github.io
|
||||
@@ -0,0 +1,307 @@
|
||||
local S = minetest.get_translator("compost")
|
||||
|
||||
compost = {}
|
||||
|
||||
local CYCLE_TIME = 30
|
||||
local NUM_LEAVES = 2
|
||||
|
||||
-- Version for compatibility checks
|
||||
compost.version = 1.0
|
||||
|
||||
if minetest.global_exists("techage") and techage.version < 0.06 then
|
||||
minetest.log("error", "[compost] Compost requires techage version 0.06 or newer!")
|
||||
return
|
||||
end
|
||||
|
||||
compost.items = {}
|
||||
compost.groups = {}
|
||||
|
||||
function compost.register_item(name)
|
||||
compost.items[name] = true
|
||||
end
|
||||
|
||||
function compost.register_group(name)
|
||||
compost.groups[name] = true
|
||||
end
|
||||
|
||||
function compost.can_compost(name)
|
||||
if compost.items[name] then
|
||||
return true
|
||||
else
|
||||
for k, i in pairs(minetest.registered_items[name].groups) do
|
||||
if i > 0 then
|
||||
if compost.groups[tostring(k)] then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
-- grass
|
||||
compost.register_item("default:grass_1")
|
||||
compost.register_item("default:junglegrass")
|
||||
|
||||
-- leaves
|
||||
compost.register_group("leaves")
|
||||
|
||||
-- dirt
|
||||
compost.register_item("default:dirt")
|
||||
compost.register_item("default:dirt_with_grass")
|
||||
|
||||
-- stick
|
||||
compost.register_item("default:stick")
|
||||
|
||||
-- food
|
||||
compost.register_item("farming:bread")
|
||||
compost.register_item("farming:wheat")
|
||||
|
||||
-- groups
|
||||
compost.register_group("plant")
|
||||
compost.register_group("flower")
|
||||
|
||||
-- flowers
|
||||
minetest.after(1, function()
|
||||
for name,_ in pairs(minetest.registered_decorations) do
|
||||
if type(name) == "string" then
|
||||
local mod = string.split(name, ":")[1]
|
||||
if mod == "flowers" then
|
||||
compost.register_item(name)
|
||||
end
|
||||
end
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
local function next_state(pos, elapsed)
|
||||
local node = minetest.get_node(pos)
|
||||
|
||||
if node.name == "compost:wood_barrel_1" then
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel_2"})
|
||||
elseif node.name == "compost:wood_barrel_2" then
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel_3"})
|
||||
elseif node.name == "compost:wood_barrel_3" then
|
||||
return false
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
local function start_composter(pos)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local num = meta:get_int("num") or 0
|
||||
if num >= NUM_LEAVES then
|
||||
-- NUM_LEAVES leaves for one compost node
|
||||
meta:set_int("num", num - NUM_LEAVES)
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel_1"})
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end
|
||||
end
|
||||
|
||||
local function add_item(pos, stack)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local num = meta:get_int("num") or 0
|
||||
|
||||
if num < NUM_LEAVES then
|
||||
-- add futher leaves
|
||||
meta:set_int("num", num + stack:get_count())
|
||||
stack:set_count(0)
|
||||
end
|
||||
|
||||
start_composter(pos)
|
||||
return stack
|
||||
end
|
||||
|
||||
local function minecart_hopper_additem(pos, stack)
|
||||
if compost.can_compost(stack:get_name()) then
|
||||
return add_item(pos, stack)
|
||||
end
|
||||
return stack
|
||||
end
|
||||
|
||||
local function minecart_hopper_takeitem(pos, num)
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel"})
|
||||
start_composter(pos)
|
||||
return ItemStack("compost:compost")
|
||||
end
|
||||
|
||||
local function minecart_hopper_untakeitem(pos, in_dir, stack)
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel_2"})
|
||||
end
|
||||
|
||||
minetest.register_node("compost:wood_barrel", {
|
||||
description = S("Wood Barrel"),
|
||||
tiles = {"default_wood.png"},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-1/2, -1/2, -1/2, 1/2, -3/8, 1/2},
|
||||
{-1/2, -1/2, -1/2, -3/8, 1/2, 1/2},
|
||||
{3/8, -1/2, -1/2, 1/2, 1/2, 1/2},
|
||||
{-1/2, -1/2, -1/2, 1/2, 1/2, -3/8},
|
||||
{-1/2, -1/2, 3/8, 1/2, 1/2, 1/2}},
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {choppy = 3},
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_punch = function(pos, node, puncher, pointed_thing)
|
||||
local wielded_item = puncher:get_wielded_item():get_name()
|
||||
if compost.can_compost(wielded_item) then
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel_1"})
|
||||
local w = puncher:get_wielded_item()
|
||||
if not minetest.is_creative_enabled(puncher:get_player_name()) then
|
||||
w:take_item(1)
|
||||
puncher:set_wielded_item(w)
|
||||
end
|
||||
minetest.get_node_timer(pos):start(CYCLE_TIME)
|
||||
end
|
||||
end,
|
||||
on_timer = next_state,
|
||||
minecart_hopper_additem = minecart_hopper_additem,
|
||||
minecart_hopper_untakeitem = minecart_hopper_untakeitem,
|
||||
})
|
||||
|
||||
minetest.register_node("compost:wood_barrel_1", {
|
||||
description = S("Wood Barrel with compost"),
|
||||
tiles = {"default_wood.png^compost_compost_1.png", "default_wood.png"},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-1/2, -1/2, -1/2, 1/2, -3/8, 1/2},
|
||||
{-1/2, -1/2, -1/2, -3/8, 1/2, 1/2},
|
||||
{3/8, -1/2, -1/2, 1/2, 1/2, 1/2},
|
||||
{-1/2, -1/2, -1/2, 1/2, 1/2, -3/8},
|
||||
{-1/2, -1/2, 3/8, 1/2, 1/2, 1/2},
|
||||
{-3/8, -1/2, -3/8, 3/8, 3/8, 3/8}},
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {choppy = 3, not_in_creative_inventory=1},
|
||||
drop = "compost:wood_barrel",
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_timer = next_state,
|
||||
minecart_hopper_untakeitem = minecart_hopper_untakeitem,
|
||||
})
|
||||
|
||||
minetest.register_node("compost:wood_barrel_2", {
|
||||
description = S("Wood Barrel with compost"),
|
||||
tiles = {"default_wood.png^compost_compost_2.png", "default_wood.png"},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-1/2, -1/2, -1/2, 1/2, -3/8, 1/2},
|
||||
{-1/2, -1/2, -1/2, -3/8, 1/2, 1/2},
|
||||
{3/8, -1/2, -1/2, 1/2, 1/2, 1/2},
|
||||
{-1/2, -1/2, -1/2, 1/2, 1/2, -3/8},
|
||||
{-1/2, -1/2, 3/8, 1/2, 1/2, 1/2},
|
||||
{-3/8, -1/2, -3/8, 3/8, 3/8, 3/8}},
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {choppy = 3, not_in_creative_inventory=1},
|
||||
drop = "compost:wood_barrel",
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_timer = next_state,
|
||||
minecart_hopper_untakeitem = minecart_hopper_untakeitem,
|
||||
})
|
||||
|
||||
minetest.register_node("compost:wood_barrel_3", {
|
||||
description = S("Wood Barrel"),
|
||||
tiles = {"default_wood.png^compost_compost_3.png", "default_wood.png"},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {{-1/2, -1/2, -1/2, 1/2, -3/8, 1/2},
|
||||
{-1/2, -1/2, -1/2, -3/8, 1/2, 1/2},
|
||||
{3/8, -1/2, -1/2, 1/2, 1/2, 1/2},
|
||||
{-1/2, -1/2, -1/2, 1/2, 1/2, -3/8},
|
||||
{-1/2, -1/2, 3/8, 1/2, 1/2, 1/2},
|
||||
{-3/8, -1/2, -3/8, 3/8, 3/8, 3/8}},
|
||||
},
|
||||
paramtype = "light",
|
||||
is_ground_content = false,
|
||||
groups = {choppy = 3, not_in_creative_inventory=1},
|
||||
drop = "compost:wood_barrel",
|
||||
sounds = default.node_sound_wood_defaults(),
|
||||
on_punch = function(pos, node, player, pointed_thing)
|
||||
local p = {x = pos.x + math.random(0, 5)/5 - 0.5, y = pos.y+1, z = pos.z + math.random(0, 5)/5 - 0.5}
|
||||
minetest.add_item(p, {name = "compost:compost"})
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel"})
|
||||
end,
|
||||
on_timer = next_state,
|
||||
minecart_hopper_takeitem = minecart_hopper_takeitem,
|
||||
minecart_hopper_untakeitem = minecart_hopper_untakeitem,
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "compost:wood_barrel",
|
||||
recipe = {
|
||||
{"default:wood", "", "default:wood"},
|
||||
{"default:wood", "", "default:wood"},
|
||||
{"default:wood", "stairs:slab_wood", "default:wood"}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_node("compost:compost", {
|
||||
description = S("Compost"),
|
||||
tiles = {"compost_compost.png"},
|
||||
groups = {crumbly = 3},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_node("compost:garden_soil", {
|
||||
description = S("Garden Soil"),
|
||||
tiles = {"compost_garden_soil.png"},
|
||||
groups = {crumbly = 3, soil=3, grassland = 1, wet = 1},
|
||||
sounds = default.node_sound_dirt_defaults(),
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "compost:garden_soil",
|
||||
recipe = {
|
||||
{"compost:compost", "compost:compost"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "default:dirt",
|
||||
recipe = {
|
||||
{"compost:garden_soil"},
|
||||
}
|
||||
})
|
||||
|
||||
if minetest.global_exists("techage") then
|
||||
techage.register_node(
|
||||
{
|
||||
"compost:wood_barrel",
|
||||
"compost:wood_barrel_1",
|
||||
"compost:wood_barrel_2",
|
||||
"compost:wood_barrel_3",
|
||||
},
|
||||
{
|
||||
on_pull_item = function(pos, in_dir, num)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == "compost:wood_barrel_3" then
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel"})
|
||||
start_composter(pos)
|
||||
return ItemStack("compost:compost")
|
||||
end
|
||||
return nil
|
||||
end,
|
||||
on_push_item = function(pos, in_dir, stack)
|
||||
local node = minetest.get_node(pos)
|
||||
if node.name == "compost:wood_barrel" and compost.can_compost(stack:get_name()) then
|
||||
stack = add_item(pos, stack)
|
||||
return stack:get_count() == 0
|
||||
end
|
||||
return false
|
||||
end,
|
||||
on_unpull_item = function(pos, in_dir, stack)
|
||||
minetest.swap_node(pos, {name = "compost:wood_barrel_2"})
|
||||
return true
|
||||
end,
|
||||
})
|
||||
end
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
# textdomain: compost
|
||||
|
||||
Wood Barrel=Деревянная Бочка
|
||||
Wood Barrel with compost=Деревянная Бочка с компостом
|
||||
Compost=Компост
|
||||
Garden Soil=Садовая Почва
|
||||
@@ -0,0 +1,6 @@
|
||||
# textdomain: compost
|
||||
|
||||
Wood Barrel=
|
||||
Wood Barrel with compost=
|
||||
Compost=
|
||||
Garden Soil=
|
||||
@@ -0,0 +1,4 @@
|
||||
name = compost
|
||||
depends = default
|
||||
optional_depends = minecart, techage
|
||||
description = With this mod, you are able to compost grass, leaves, flowers...
|
||||
|
After Width: | Height: | Size: 286 KiB |
|
After Width: | Height: | Size: 785 B |
|
After Width: | Height: | Size: 483 B |
|
After Width: | Height: | Size: 487 B |
|
After Width: | Height: | Size: 461 B |
|
After Width: | Height: | Size: 698 B |
@@ -0,0 +1,669 @@
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
Version 3, 19 November 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The GNU Affero General Public License is a free, copyleft license for
|
||||
software and other kinds of works, specifically designed to ensure
|
||||
cooperation with the community in the case of network server software.
|
||||
|
||||
The licenses for most software and other practical works are designed
|
||||
to take away your freedom to share and change the works. By contrast,
|
||||
our General Public Licenses are intended to guarantee your freedom to
|
||||
share and change all versions of a program--to make sure it remains free
|
||||
software for all its users.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
them if you wish), that you receive source code or can get it if you
|
||||
want it, that you can change the software or use pieces of it in new
|
||||
free programs, and that you know you can do these things.
|
||||
|
||||
Developers that use our General Public Licenses protect your rights
|
||||
with two steps: (1) assert copyright on the software, and (2) offer
|
||||
you this License which gives you legal permission to copy, distribute
|
||||
and/or modify the software.
|
||||
|
||||
A secondary benefit of defending all users' freedom is that
|
||||
improvements made in alternate versions of the program, if they
|
||||
receive widespread use, become available for other developers to
|
||||
incorporate. Many developers of free software are heartened and
|
||||
encouraged by the resulting cooperation. However, in the case of
|
||||
software used on network servers, this result may fail to come about.
|
||||
The GNU General Public License permits making a modified version and
|
||||
letting the public access it on a server without ever releasing its
|
||||
source code to the public.
|
||||
|
||||
The GNU Affero General Public License is designed specifically to
|
||||
ensure that, in such cases, the modified source code becomes available
|
||||
to the community. It requires the operator of a network server to
|
||||
provide the source code of the modified version running there to the
|
||||
users of that server. Therefore, public use of a modified version, on
|
||||
a publicly accessible server, gives the public access to the source
|
||||
code of the modified version.
|
||||
|
||||
An older license, called the Affero General Public License and
|
||||
published by Affero, was designed to accomplish similar goals. This is
|
||||
a different license, not a version of the Affero GPL, but Affero has
|
||||
released a new version of the Affero GPL which permits relicensing under
|
||||
this license.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
TERMS AND CONDITIONS
|
||||
|
||||
0. Definitions.
|
||||
|
||||
"This License" refers to version 3 of the GNU Affero General Public License.
|
||||
|
||||
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||
works, such as semiconductor masks.
|
||||
|
||||
"The Program" refers to any copyrightable work licensed under this
|
||||
License. Each licensee is addressed as "you". "Licensees" and
|
||||
"recipients" may be individuals or organizations.
|
||||
|
||||
To "modify" a work means to copy from or adapt all or part of the work
|
||||
in a fashion requiring copyright permission, other than the making of an
|
||||
exact copy. The resulting work is called a "modified version" of the
|
||||
earlier work or a work "based on" the earlier work.
|
||||
|
||||
A "covered work" means either the unmodified Program or a work based
|
||||
on the Program.
|
||||
|
||||
To "propagate" a work means to do anything with it that, without
|
||||
permission, would make you directly or secondarily liable for
|
||||
infringement under applicable copyright law, except executing it on a
|
||||
computer or modifying a private copy. Propagation includes copying,
|
||||
distribution (with or without modification), making available to the
|
||||
public, and in some countries other activities as well.
|
||||
|
||||
To "convey" a work means any kind of propagation that enables other
|
||||
parties to make or receive copies. Mere interaction with a user through
|
||||
a computer network, with no transfer of a copy, is not conveying.
|
||||
|
||||
An interactive user interface displays "Appropriate Legal Notices"
|
||||
to the extent that it includes a convenient and prominently visible
|
||||
feature that (1) displays an appropriate copyright notice, and (2)
|
||||
tells the user that there is no warranty for the work (except to the
|
||||
extent that warranties are provided), that licensees may convey the
|
||||
work under this License, and how to view a copy of this License. If
|
||||
the interface presents a list of user commands or options, such as a
|
||||
menu, a prominent item in the list meets this criterion.
|
||||
|
||||
1. Source Code.
|
||||
|
||||
The "source code" for a work means the preferred form of the work
|
||||
for making modifications to it. "Object code" means any non-source
|
||||
form of a work.
|
||||
|
||||
A "Standard Interface" means an interface that either is an official
|
||||
standard defined by a recognized standards body, or, in the case of
|
||||
interfaces specified for a particular programming language, one that
|
||||
is widely used among developers working in that language.
|
||||
|
||||
The "System Libraries" of an executable work include anything, other
|
||||
than the work as a whole, that (a) is included in the normal form of
|
||||
packaging a Major Component, but which is not part of that Major
|
||||
Component, and (b) serves only to enable use of the work with that
|
||||
Major Component, or to implement a Standard Interface for which an
|
||||
implementation is available to the public in source code form. A
|
||||
"Major Component", in this context, means a major essential component
|
||||
(kernel, window system, and so on) of the specific operating system
|
||||
(if any) on which the executable work runs, or a compiler used to
|
||||
produce the work, or an object code interpreter used to run it.
|
||||
|
||||
The "Corresponding Source" for a work in object code form means all
|
||||
the source code needed to generate, install, and (for an executable
|
||||
work) run the object code and to modify the work, including scripts to
|
||||
control those activities. However, it does not include the work's
|
||||
System Libraries, or general-purpose tools or generally available free
|
||||
programs which are used unmodified in performing those activities but
|
||||
which are not part of the work. For example, Corresponding Source
|
||||
includes interface definition files associated with source files for
|
||||
the work, and the source code for shared libraries and dynamically
|
||||
linked subprograms that the work is specifically designed to require,
|
||||
such as by intimate data communication or control flow between those
|
||||
subprograms and other parts of the work.
|
||||
|
||||
The Corresponding Source need not include anything that users
|
||||
can regenerate automatically from other parts of the Corresponding
|
||||
Source.
|
||||
|
||||
The Corresponding Source for a work in source code form is that
|
||||
same work.
|
||||
|
||||
2. Basic Permissions.
|
||||
|
||||
All rights granted under this License are granted for the term of
|
||||
copyright on the Program, and are irrevocable provided the stated
|
||||
conditions are met. This License explicitly affirms your unlimited
|
||||
permission to run the unmodified Program. The output from running a
|
||||
covered work is covered by this License only if the output, given its
|
||||
content, constitutes a covered work. This License acknowledges your
|
||||
rights of fair use or other equivalent, as provided by copyright law.
|
||||
|
||||
You may make, run and propagate covered works that you do not
|
||||
convey, without conditions so long as your license otherwise remains
|
||||
in force. You may convey covered works to others for the sole purpose
|
||||
of having them make modifications exclusively for you, or provide you
|
||||
with facilities for running those works, provided that you comply with
|
||||
the terms of this License in conveying all material for which you do
|
||||
not control copyright. Those thus making or running the covered works
|
||||
for you must do so exclusively on your behalf, under your direction
|
||||
and control, on terms that prohibit them from making any copies of
|
||||
your copyrighted material outside their relationship with you.
|
||||
|
||||
Conveying under any other circumstances is permitted solely under
|
||||
the conditions stated below. Sublicensing is not allowed; section 10
|
||||
makes it unnecessary.
|
||||
|
||||
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||
|
||||
No covered work shall be deemed part of an effective technological
|
||||
measure under any applicable law fulfilling obligations under article
|
||||
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||
similar laws prohibiting or restricting circumvention of such
|
||||
measures.
|
||||
|
||||
When you convey a covered work, you waive any legal power to forbid
|
||||
circumvention of technological measures to the extent such circumvention
|
||||
is effected by exercising rights under this License with respect to
|
||||
the covered work, and you disclaim any intention to limit operation or
|
||||
modification of the work as a means of enforcing, against the work's
|
||||
users, your or third parties' legal rights to forbid circumvention of
|
||||
technological measures.
|
||||
|
||||
4. Conveying Verbatim Copies.
|
||||
|
||||
You may convey verbatim copies of the Program's source code as you
|
||||
receive it, in any medium, provided that you conspicuously and
|
||||
appropriately publish on each copy an appropriate copyright notice;
|
||||
keep intact all notices stating that this License and any
|
||||
non-permissive terms added in accord with section 7 apply to the code;
|
||||
keep intact all notices of the absence of any warranty; and give all
|
||||
recipients a copy of this License along with the Program.
|
||||
|
||||
You may charge any price or no price for each copy that you convey,
|
||||
and you may offer support or warranty protection for a fee.
|
||||
|
||||
5. Conveying Modified Source Versions.
|
||||
|
||||
You may convey a work based on the Program, or the modifications to
|
||||
produce it from the Program, in the form of source code under the
|
||||
terms of section 4, provided that you also meet all of these conditions:
|
||||
|
||||
a) The work must carry prominent notices stating that you modified
|
||||
it, and giving a relevant date.
|
||||
|
||||
b) The work must carry prominent notices stating that it is
|
||||
released under this License and any conditions added under section
|
||||
7. This requirement modifies the requirement in section 4 to
|
||||
"keep intact all notices".
|
||||
|
||||
c) You must license the entire work, as a whole, under this
|
||||
License to anyone who comes into possession of a copy. This
|
||||
License will therefore apply, along with any applicable section 7
|
||||
additional terms, to the whole of the work, and all its parts,
|
||||
regardless of how they are packaged. This License gives no
|
||||
permission to license the work in any other way, but it does not
|
||||
invalidate such permission if you have separately received it.
|
||||
|
||||
d) If the work has interactive user interfaces, each must display
|
||||
Appropriate Legal Notices; however, if the Program has interactive
|
||||
interfaces that do not display Appropriate Legal Notices, your
|
||||
work need not make them do so.
|
||||
|
||||
A compilation of a covered work with other separate and independent
|
||||
works, which are not by their nature extensions of the covered work,
|
||||
and which are not combined with it such as to form a larger program,
|
||||
in or on a volume of a storage or distribution medium, is called an
|
||||
"aggregate" if the compilation and its resulting copyright are not
|
||||
used to limit the access or legal rights of the compilation's users
|
||||
beyond what the individual works permit. Inclusion of a covered work
|
||||
in an aggregate does not cause this License to apply to the other
|
||||
parts of the aggregate.
|
||||
|
||||
6. Conveying Non-Source Forms.
|
||||
|
||||
You may convey a covered work in object code form under the terms
|
||||
of sections 4 and 5, provided that you also convey the
|
||||
machine-readable Corresponding Source under the terms of this License,
|
||||
in one of these ways:
|
||||
|
||||
a) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by the
|
||||
Corresponding Source fixed on a durable physical medium
|
||||
customarily used for software interchange.
|
||||
|
||||
b) Convey the object code in, or embodied in, a physical product
|
||||
(including a physical distribution medium), accompanied by a
|
||||
written offer, valid for at least three years and valid for as
|
||||
long as you offer spare parts or customer support for that product
|
||||
model, to give anyone who possesses the object code either (1) a
|
||||
copy of the Corresponding Source for all the software in the
|
||||
product that is covered by this License, on a durable physical
|
||||
medium customarily used for software interchange, for a price no
|
||||
more than your reasonable cost of physically performing this
|
||||
conveying of source, or (2) access to copy the
|
||||
Corresponding Source from a network server at no charge.
|
||||
|
||||
c) Convey individual copies of the object code with a copy of the
|
||||
written offer to provide the Corresponding Source. This
|
||||
alternative is allowed only occasionally and noncommercially, and
|
||||
only if you received the object code with such an offer, in accord
|
||||
with subsection 6b.
|
||||
|
||||
d) Convey the object code by offering access from a designated
|
||||
place (gratis or for a charge), and offer equivalent access to the
|
||||
Corresponding Source in the same way through the same place at no
|
||||
further charge. You need not require recipients to copy the
|
||||
Corresponding Source along with the object code. If the place to
|
||||
copy the object code is a network server, the Corresponding Source
|
||||
may be on a different server (operated by you or a third party)
|
||||
that supports equivalent copying facilities, provided you maintain
|
||||
clear directions next to the object code saying where to find the
|
||||
Corresponding Source. Regardless of what server hosts the
|
||||
Corresponding Source, you remain obligated to ensure that it is
|
||||
available for as long as needed to satisfy these requirements.
|
||||
|
||||
e) Convey the object code using peer-to-peer transmission, provided
|
||||
you inform other peers where the object code and Corresponding
|
||||
Source of the work are being offered to the general public at no
|
||||
charge under subsection 6d.
|
||||
|
||||
A separable portion of the object code, whose source code is excluded
|
||||
from the Corresponding Source as a System Library, need not be
|
||||
included in conveying the object code work.
|
||||
|
||||
A "User Product" is either (1) a "consumer product", which means any
|
||||
tangible personal property which is normally used for personal, family,
|
||||
or household purposes, or (2) anything designed or sold for incorporation
|
||||
into a dwelling. In determining whether a product is a consumer product,
|
||||
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||
product received by a particular user, "normally used" refers to a
|
||||
typical or common use of that class of product, regardless of the status
|
||||
of the particular user or of the way in which the particular user
|
||||
actually uses, or expects or is expected to use, the product. A product
|
||||
is a consumer product regardless of whether the product has substantial
|
||||
commercial, industrial or non-consumer uses, unless such uses represent
|
||||
the only significant mode of use of the product.
|
||||
|
||||
"Installation Information" for a User Product means any methods,
|
||||
procedures, authorization keys, or other information required to install
|
||||
and execute modified versions of a covered work in that User Product from
|
||||
a modified version of its Corresponding Source. The information must
|
||||
suffice to ensure that the continued functioning of the modified object
|
||||
code is in no case prevented or interfered with solely because
|
||||
modification has been made.
|
||||
|
||||
If you convey an object code work under this section in, or with, or
|
||||
specifically for use in, a User Product, and the conveying occurs as
|
||||
part of a transaction in which the right of possession and use of the
|
||||
User Product is transferred to the recipient in perpetuity or for a
|
||||
fixed term (regardless of how the transaction is characterized), the
|
||||
Corresponding Source conveyed under this section must be accompanied
|
||||
by the Installation Information. But this requirement does not apply
|
||||
if neither you nor any third party retains the ability to install
|
||||
modified object code on the User Product (for example, the work has
|
||||
been installed in ROM).
|
||||
|
||||
The requirement to provide Installation Information does not include a
|
||||
requirement to continue to provide support service, warranty, or updates
|
||||
for a work that has been modified or installed by the recipient, or for
|
||||
the User Product in which it has been modified or installed. Access to a
|
||||
network may be denied when the modification itself materially and
|
||||
adversely affects the operation of the network or violates the rules and
|
||||
protocols for communication across the network.
|
||||
|
||||
Corresponding Source conveyed, and Installation Information provided,
|
||||
in accord with this section must be in a format that is publicly
|
||||
documented (and with an implementation available to the public in
|
||||
source code form), and must require no special password or key for
|
||||
unpacking, reading or copying.
|
||||
|
||||
7. Additional Terms.
|
||||
|
||||
"Additional permissions" are terms that supplement the terms of this
|
||||
License by making exceptions from one or more of its conditions.
|
||||
Additional permissions that are applicable to the entire Program shall
|
||||
be treated as though they were included in this License, to the extent
|
||||
that they are valid under applicable law. If additional permissions
|
||||
apply only to part of the Program, that part may be used separately
|
||||
under those permissions, but the entire Program remains governed by
|
||||
this License without regard to the additional permissions.
|
||||
|
||||
When you convey a copy of a covered work, you may at your option
|
||||
remove any additional permissions from that copy, or from any part of
|
||||
it. (Additional permissions may be written to require their own
|
||||
removal in certain cases when you modify the work.) You may place
|
||||
additional permissions on material, added by you to a covered work,
|
||||
for which you have or can give appropriate copyright permission.
|
||||
|
||||
Notwithstanding any other provision of this License, for material you
|
||||
add to a covered work, you may (if authorized by the copyright holders of
|
||||
that material) supplement the terms of this License with terms:
|
||||
|
||||
a) Disclaiming warranty or limiting liability differently from the
|
||||
terms of sections 15 and 16 of this License; or
|
||||
|
||||
b) Requiring preservation of specified reasonable legal notices or
|
||||
author attributions in that material or in the Appropriate Legal
|
||||
Notices displayed by works containing it; or
|
||||
|
||||
c) Prohibiting misrepresentation of the origin of that material, or
|
||||
requiring that modified versions of such material be marked in
|
||||
reasonable ways as different from the original version; or
|
||||
|
||||
d) Limiting the use for publicity purposes of names of licensors or
|
||||
authors of the material; or
|
||||
|
||||
e) Declining to grant rights under trademark law for use of some
|
||||
trade names, trademarks, or service marks; or
|
||||
|
||||
f) Requiring indemnification of licensors and authors of that
|
||||
material by anyone who conveys the material (or modified versions of
|
||||
it) with contractual assumptions of liability to the recipient, for
|
||||
any liability that these contractual assumptions directly impose on
|
||||
those licensors and authors.
|
||||
|
||||
All other non-permissive additional terms are considered "further
|
||||
restrictions" within the meaning of section 10. If the Program as you
|
||||
received it, or any part of it, contains a notice stating that it is
|
||||
governed by this License along with a term that is a further
|
||||
restriction, you may remove that term. If a license document contains
|
||||
a further restriction but permits relicensing or conveying under this
|
||||
License, you may add to a covered work material governed by the terms
|
||||
of that license document, provided that the further restriction does
|
||||
not survive such relicensing or conveying.
|
||||
|
||||
If you add terms to a covered work in accord with this section, you
|
||||
must place, in the relevant source files, a statement of the
|
||||
additional terms that apply to those files, or a notice indicating
|
||||
where to find the applicable terms.
|
||||
|
||||
Additional terms, permissive or non-permissive, may be stated in the
|
||||
form of a separately written license, or stated as exceptions;
|
||||
the above requirements apply either way.
|
||||
|
||||
8. Termination.
|
||||
|
||||
You may not propagate or modify a covered work except as expressly
|
||||
provided under this License. Any attempt otherwise to propagate or
|
||||
modify it is void, and will automatically terminate your rights under
|
||||
this License (including any patent licenses granted under the third
|
||||
paragraph of section 11).
|
||||
|
||||
However, if you cease all violation of this License, then your
|
||||
license from a particular copyright holder is reinstated (a)
|
||||
provisionally, unless and until the copyright holder explicitly and
|
||||
finally terminates your license, and (b) permanently, if the copyright
|
||||
holder fails to notify you of the violation by some reasonable means
|
||||
prior to 60 days after the cessation.
|
||||
|
||||
Moreover, your license from a particular copyright holder is
|
||||
reinstated permanently if the copyright holder notifies you of the
|
||||
violation by some reasonable means, this is the first time you have
|
||||
received notice of violation of this License (for any work) from that
|
||||
copyright holder, and you cure the violation prior to 30 days after
|
||||
your receipt of the notice.
|
||||
|
||||
Termination of your rights under this section does not terminate the
|
||||
licenses of parties who have received copies or rights from you under
|
||||
this License. If your rights have been terminated and not permanently
|
||||
reinstated, you do not qualify to receive new licenses for the same
|
||||
material under section 10.
|
||||
|
||||
9. Acceptance Not Required for Having Copies.
|
||||
|
||||
You are not required to accept this License in order to receive or
|
||||
run a copy of the Program. Ancillary propagation of a covered work
|
||||
occurring solely as a consequence of using peer-to-peer transmission
|
||||
to receive a copy likewise does not require acceptance. However,
|
||||
nothing other than this License grants you permission to propagate or
|
||||
modify any covered work. These actions infringe copyright if you do
|
||||
not accept this License. Therefore, by modifying or propagating a
|
||||
covered work, you indicate your acceptance of this License to do so.
|
||||
|
||||
10. Automatic Licensing of Downstream Recipients.
|
||||
|
||||
Each time you convey a covered work, the recipient automatically
|
||||
receives a license from the original licensors, to run, modify and
|
||||
propagate that work, subject to this License. You are not responsible
|
||||
for enforcing compliance by third parties with this License.
|
||||
|
||||
An "entity transaction" is a transaction transferring control of an
|
||||
organization, or substantially all assets of one, or subdividing an
|
||||
organization, or merging organizations. If propagation of a covered
|
||||
work results from an entity transaction, each party to that
|
||||
transaction who receives a copy of the work also receives whatever
|
||||
licenses to the work the party's predecessor in interest had or could
|
||||
give under the previous paragraph, plus a right to possession of the
|
||||
Corresponding Source of the work from the predecessor in interest, if
|
||||
the predecessor has it or can get it with reasonable efforts.
|
||||
|
||||
You may not impose any further restrictions on the exercise of the
|
||||
rights granted or affirmed under this License. For example, you may
|
||||
not impose a license fee, royalty, or other charge for exercise of
|
||||
rights granted under this License, and you may not initiate litigation
|
||||
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||
any patent claim is infringed by making, using, selling, offering for
|
||||
sale, or importing the Program or any portion of it.
|
||||
|
||||
11. Patents.
|
||||
|
||||
A "contributor" is a copyright holder who authorizes use under this
|
||||
License of the Program or a work on which the Program is based. The
|
||||
work thus licensed is called the contributor's "contributor version".
|
||||
|
||||
A contributor's "essential patent claims" are all patent claims
|
||||
owned or controlled by the contributor, whether already acquired or
|
||||
hereafter acquired, that would be infringed by some manner, permitted
|
||||
by this License, of making, using, or selling its contributor version,
|
||||
but do not include claims that would be infringed only as a
|
||||
consequence of further modification of the contributor version. For
|
||||
purposes of this definition, "control" includes the right to grant
|
||||
patent sublicenses in a manner consistent with the requirements of
|
||||
this License.
|
||||
|
||||
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||
patent license under the contributor's essential patent claims, to
|
||||
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||
propagate the contents of its contributor version.
|
||||
|
||||
In the following three paragraphs, a "patent license" is any express
|
||||
agreement or commitment, however denominated, not to enforce a patent
|
||||
(such as an express permission to practice a patent or covenant not to
|
||||
sue for patent infringement). To "grant" such a patent license to a
|
||||
party means to make such an agreement or commitment not to enforce a
|
||||
patent against the party.
|
||||
|
||||
If you convey a covered work, knowingly relying on a patent license,
|
||||
and the Corresponding Source of the work is not available for anyone
|
||||
to copy, free of charge and under the terms of this License, through a
|
||||
publicly available network server or other readily accessible means,
|
||||
then you must either (1) cause the Corresponding Source to be so
|
||||
available, or (2) arrange to deprive yourself of the benefit of the
|
||||
patent license for this particular work, or (3) arrange, in a manner
|
||||
consistent with the requirements of this License, to extend the patent
|
||||
license to downstream recipients. "Knowingly relying" means you have
|
||||
actual knowledge that, but for the patent license, your conveying the
|
||||
covered work in a country, or your recipient's use of the covered work
|
||||
in a country, would infringe one or more identifiable patents in that
|
||||
country that you have reason to believe are valid.
|
||||
|
||||
If, pursuant to or in connection with a single transaction or
|
||||
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||
covered work, and grant a patent license to some of the parties
|
||||
receiving the covered work authorizing them to use, propagate, modify
|
||||
or convey a specific copy of the covered work, then the patent license
|
||||
you grant is automatically extended to all recipients of the covered
|
||||
work and works based on it.
|
||||
|
||||
A patent license is "discriminatory" if it does not include within
|
||||
the scope of its coverage, prohibits the exercise of, or is
|
||||
conditioned on the non-exercise of one or more of the rights that are
|
||||
specifically granted under this License. You may not convey a covered
|
||||
work if you are a party to an arrangement with a third party that is
|
||||
in the business of distributing software, under which you make payment
|
||||
to the third party based on the extent of your activity of conveying
|
||||
the work, and under which the third party grants, to any of the
|
||||
parties who would receive the covered work from you, a discriminatory
|
||||
patent license (a) in connection with copies of the covered work
|
||||
conveyed by you (or copies made from those copies), or (b) primarily
|
||||
for and in connection with specific products or compilations that
|
||||
contain the covered work, unless you entered into that arrangement,
|
||||
or that patent license was granted, prior to 28 March 2007.
|
||||
|
||||
Nothing in this License shall be construed as excluding or limiting
|
||||
any implied license or other defenses to infringement that may
|
||||
otherwise be available to you under applicable patent law.
|
||||
|
||||
12. No Surrender of Others' Freedom.
|
||||
|
||||
If conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot convey a
|
||||
covered work so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you may
|
||||
not convey it at all. For example, if you agree to terms that obligate you
|
||||
to collect a royalty for further conveying from those to whom you convey
|
||||
the Program, the only way you could satisfy both those terms and this
|
||||
License would be to refrain entirely from conveying the Program.
|
||||
|
||||
13. Remote Network Interaction; Use with the GNU General Public License.
|
||||
|
||||
Notwithstanding any other provision of this License, if you modify the
|
||||
Program, your modified version must prominently offer all users
|
||||
interacting with it remotely through a computer network (if your version
|
||||
supports such interaction) an opportunity to receive the Corresponding
|
||||
Source of your version by providing access to the Corresponding Source
|
||||
from a network server at no charge, through some standard or customary
|
||||
means of facilitating copying of software. This Corresponding Source
|
||||
shall include the Corresponding Source for any work covered by version 3
|
||||
of the GNU General Public License that is incorporated pursuant to the
|
||||
following paragraph.
|
||||
|
||||
Notwithstanding any other provision of this License, you have
|
||||
permission to link or combine any covered work with a work licensed
|
||||
under version 3 of the GNU General Public License into a single
|
||||
combined work, and to convey the resulting work. The terms of this
|
||||
License will continue to apply to the part which is the covered work,
|
||||
but the work with which it is combined will remain governed by version
|
||||
3 of the GNU General Public License.
|
||||
|
||||
14. Revised Versions of this License.
|
||||
|
||||
The Free Software Foundation may publish revised and/or new versions of
|
||||
the GNU Affero General Public License from time to time. Such new versions
|
||||
will be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the
|
||||
Program specifies that a certain numbered version of the GNU Affero General
|
||||
Public License "or any later version" applies to it, you have the
|
||||
option of following the terms and conditions either of that numbered
|
||||
version or of any later version published by the Free Software
|
||||
Foundation. If the Program does not specify a version number of the
|
||||
GNU Affero General Public License, you may choose any version ever published
|
||||
by the Free Software Foundation.
|
||||
|
||||
If the Program specifies that a proxy can decide which future
|
||||
versions of the GNU Affero General Public License can be used, that proxy's
|
||||
public statement of acceptance of a version permanently authorizes you
|
||||
to choose that version for the Program.
|
||||
|
||||
Later license versions may give you additional or different
|
||||
permissions. However, no additional obligations are imposed on any
|
||||
author or copyright holder as a result of your choosing to follow a
|
||||
later version.
|
||||
|
||||
15. Disclaimer of Warranty.
|
||||
|
||||
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
|
||||
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
|
||||
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
|
||||
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
|
||||
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
|
||||
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||
|
||||
16. Limitation of Liability.
|
||||
|
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
|
||||
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
|
||||
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
|
||||
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
|
||||
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
|
||||
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGES.
|
||||
|
||||
17. Interpretation of Sections 15 and 16.
|
||||
|
||||
If the disclaimer of warranty and limitation of liability provided
|
||||
above cannot be given local legal effect according to their terms,
|
||||
reviewing courts shall apply local law that most closely approximates
|
||||
an absolute waiver of all civil liability in connection with the
|
||||
Program, unless a warranty or assumption of liability accompanies a
|
||||
copy of the Program in return for a fee.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
A library to generate ingame manuals based on markdown files.
|
||||
Copyright (C) 2023 Joachim Stolberg
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If your software can interact with users remotely through a computer
|
||||
network, you should also make sure that it provides a way for users to
|
||||
get its source. For example, if your program is a web application, its
|
||||
interface could display a "Source" link that leads users to an archive
|
||||
of the code. There are many ways you could offer source, and different
|
||||
solutions will be better for different programs; see section 13 for the
|
||||
specific requirements.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or school,
|
||||
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||
For more information on this, and how to apply and follow the GNU AGPL, see
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
==============================================================================
|
||||
|
||||
Joachim Stolberg, CC BY-SA 3.0:
|
||||
|
||||
* doclib_book.png
|
||||
* doclib_book_inv.png
|
||||
* doclib_demo_img*.png
|
||||
@@ -0,0 +1,118 @@
|
||||
DocLib [doclib]
|
||||
===============
|
||||
|
||||
**A library to generate ingame manuals based on markdown files.**
|
||||
|
||||
Browse on: [GitHub](https://github.com/joe7575/doclib)
|
||||
|
||||
Download: [GitHub](https://github.com/joe7575/doclib/archive/main.zip)
|
||||
|
||||

|
||||
|
||||
|
||||
### Introduction
|
||||
|
||||
DocLib is used to generate a manual as ingame documentation.
|
||||
The manual content is generated based on markdown files.
|
||||
|
||||
An advantage of this solution is the dual use of the documentation:
|
||||
|
||||
- A markdown file as web solution e. g. on GitHub
|
||||
- A book as ingame manual
|
||||
|
||||
To generate a manual for your mod:
|
||||
|
||||
- Create your documentation as markdown file
|
||||
- Copy the python script `markdown_to_lua.py` to your mod folder
|
||||
- Add your markdown file to the python script (the last few lines)
|
||||
- Install mistune with `pip install mistune==0.8.4`
|
||||
- Run the script with `python markdown_to_lua.py`
|
||||
- Implement the book node according to `node.lua`
|
||||
|
||||
|
||||
### Supported Markdown Markups
|
||||
|
||||
- Heading
|
||||
- List
|
||||
- Code block
|
||||
|
||||
In addition DocLib supports image links for the ingame manual:
|
||||
|
||||
- for node images: `[doclib:manual|image]`
|
||||
- for PNG images: `[doclib_book_inv.png|image]`
|
||||
|
||||
See examples in `manual_EN.md`.
|
||||
|
||||
|
||||
### Construction Plans
|
||||
|
||||
This is a feature, mainly used by the mod techage to show construction plans of
|
||||
multi-block machines. But it can be used for any other mod, too.
|
||||
|
||||

|
||||
|
||||
A construction plan is a map with up to 12 * 10 fields.
|
||||
Each field can contain a node/item, text, or an image.
|
||||
|
||||
The arrangement is defined via a Lua table.
|
||||
|
||||
- Unused field elements are set to `false`
|
||||
- For a text field (red mark) a table like `{"text", "Pointless Demo"}` is used
|
||||
- For an item field (yellow mark) a table like `{"item", "doclib_demo_img2.png", "Tooltip 1"}` is used.
|
||||
The third value is a tooltip. It can be a string, a node name, or `nil` for no tooltip.
|
||||
- For an image field (blue mark) a table like `{"img", "doclib_book_inv.png", "2,2"}` is used.
|
||||
The third value is the image size in fields (width x height).
|
||||
|
||||
This is an example of a map with 12 * 10 fields from the demo code in `node.lua`:
|
||||
|
||||
```lua
|
||||
|
||||
local ITEM1 = {"item", "doclib_demo_img1.png"}
|
||||
local ITEM2 = {"item", "doclib_demo_img2.png", "Tooltip 1"}
|
||||
local ITEM3 = {"item", "doclib_demo_img3.png", "Tooltip 2"}
|
||||
local ITEM4 = {"item", "doclib_demo_img4.png", "Tooltip 3"}
|
||||
local ITEM5 = {"item", "doclib_book_inv.png", "doclib:manual"}
|
||||
local ITEM6 = {"item", "doclib:manual", "doclib:manual"}
|
||||
local IMG_1 = {"img", "doclib_book_inv.png", "2,2"}
|
||||
local TEXT1 = {"text", "Top view"}
|
||||
local TEXT2 = {"text", "Pointless Demo"}
|
||||
local TEXT3 = {"text", "End"}
|
||||
|
||||
local plan1 = {
|
||||
{TEXT2, false, false, false, false, false, false, false, false, false, false, ITEM4},
|
||||
{false, false, false, TEXT1, false, false, false, false, IMG_1, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, ITEM1, false, false, false, false, false, false, false},
|
||||
{false, false, false, ITEM4, ITEM5, ITEM2, false, false, false, false, false, false},
|
||||
{false, false, false, false, ITEM3, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, ITEM6, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{TEXT3, false, false, false, false, false, false, false, false, false, false, ITEM4},
|
||||
}
|
||||
|
||||
doclib.add_manual_plan("doclib", "EN", "demo1", plan1)
|
||||
```
|
||||
|
||||
With `doclib.add_manual_plan` the plan is stored under the name "demo1".
|
||||
|
||||
|
||||
### License
|
||||
|
||||
Copyright (C) 2023 Joachim Stolberg
|
||||
|
||||
Code: Licensed under the GNU AGPL version 3. See LICENSE.txt
|
||||
Textures: CC BY-SA 3.0
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
none
|
||||
|
||||
|
||||
### History
|
||||
|
||||
- 2023-07-30 V1.00 * First commit
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
--[[
|
||||
|
||||
DocLib
|
||||
======
|
||||
|
||||
Copyright (C) 2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
A library to generate ingame manuals based on markdown files.
|
||||
|
||||
]]--
|
||||
|
||||
function doclib.create_manual(mod, language, settings)
|
||||
doclib.manual = doclib.manual or {}
|
||||
doclib.manual[mod] = doclib.manual[mod] or {}
|
||||
doclib.manual[mod][language] = doclib.manual[mod][language] or {settings = settings,
|
||||
content = {
|
||||
aTitles = {},
|
||||
aTexts = {},
|
||||
aImages = {},
|
||||
aPlans = {},
|
||||
kvImages = {},
|
||||
kvPlans = {},
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
function doclib.add_to_manual(mod, language, content)
|
||||
local manual = doclib.manual[mod][language]
|
||||
|
||||
for _, item in ipairs(content.titles) do
|
||||
table.insert(manual.content.aTitles, item)
|
||||
end
|
||||
for _, item in ipairs(content.texts) do
|
||||
table.insert(manual.content.aTexts, item)
|
||||
end
|
||||
for _, item in ipairs(content.images) do
|
||||
table.insert(manual.content.aImages, item)
|
||||
end
|
||||
for _, item in ipairs(content.plans) do
|
||||
table.insert(manual.content.aPlans, item)
|
||||
end
|
||||
end
|
||||
|
||||
-- Replace image tag from the markdown file with real PNG file name or node name
|
||||
function doclib.add_manual_image(mod, language, name, image)
|
||||
local manual = doclib.manual[mod][language]
|
||||
manual.content.kvImages[name] = image
|
||||
end
|
||||
|
||||
-- Replace plan tag from the markdown file with real Lua plan table
|
||||
function doclib.add_manual_plan(mod, language, name, plan)
|
||||
local manual = doclib.manual[mod][language]
|
||||
manual.content.kvPlans[name] = plan
|
||||
end
|
||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,157 @@
|
||||
--[[
|
||||
|
||||
DocLib
|
||||
======
|
||||
|
||||
Copyright (C) 2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
A library to generate ingame manuals based on markdown files.
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
local S = doclib.S
|
||||
local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end
|
||||
local S2P = minetest.string_to_pos
|
||||
local M = minetest.get_meta
|
||||
|
||||
local function get_text(text, x_offs, y_offs)
|
||||
if text == "top_view" then
|
||||
return "label[" .. x_offs .. "," .. y_offs .. ";" .. S("Top view") .. "]"
|
||||
elseif text == "side_view" then
|
||||
return "label[" .. x_offs .. "," .. y_offs .. ";" .. S("Side view") .. "]"
|
||||
elseif text == "sectional_view" then
|
||||
return "label[" .. x_offs .. "," .. y_offs .. ";" .. S("Sectional view") .. "]"
|
||||
end
|
||||
return "label[" .. x_offs .. "," .. y_offs .. ";" .. minetest.formspec_escape(text) .. "]"
|
||||
end
|
||||
|
||||
local function get_image(image, size, x_offs, y_offs)
|
||||
size = size or "2.2,2.2"
|
||||
return "image[" .. x_offs .. "," .. y_offs .. ";" .. size .. ";" .. image .. "]"
|
||||
end
|
||||
|
||||
local function get_item(item, tooltip, x_offs, y_offs)
|
||||
local ndef = minetest.registered_nodes[tooltip]
|
||||
if ndef and ndef.description then
|
||||
tooltip = minetest.formspec_escape(ndef.description)
|
||||
else
|
||||
tooltip = minetest.formspec_escape(tooltip) or ""
|
||||
end
|
||||
tooltip = "tooltip[" .. x_offs .. "," .. y_offs .. ";1,1;" .. tooltip .. ";#0C3D32;#FFFFFF]"
|
||||
|
||||
if string.find(item, ":") then
|
||||
return "item_image[" .. x_offs .. "," .. y_offs .. ";1,1;" .. item .. "]", tooltip
|
||||
else
|
||||
return "image[" .. x_offs .. "," .. y_offs .. ";1,1;" .. item .. "]", tooltip
|
||||
end
|
||||
end
|
||||
|
||||
local function get_item_data(tbl, x_offs, y_offs)
|
||||
if type(tbl) == "table" then
|
||||
local ttype = tbl[1]
|
||||
if ttype == "item" then
|
||||
return get_item(tbl[2], tbl[3], x_offs, y_offs)
|
||||
elseif ttype == "img" then
|
||||
return get_image(tbl[2], tbl[3], x_offs, y_offs), ""
|
||||
elseif ttype == "text" then
|
||||
return get_text(tbl[2], x_offs, y_offs), ""
|
||||
else
|
||||
return "", ""
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- formspec images
|
||||
local function plan(images)
|
||||
local tbl = {}
|
||||
if images == "none" then return "label[1,3;"..S("No plan available") .."]" end
|
||||
for y=1,#images do
|
||||
for x=1,#images[1] do
|
||||
local item = images[y][x] or false
|
||||
if item ~= false then
|
||||
local x_offs, y_offs = (x-1) * 0.9, (y-1) * 0.9 + 0.8
|
||||
local image, tooltip = get_item_data(item, x_offs, y_offs)
|
||||
tbl[#tbl+1] = image
|
||||
if tooltip then
|
||||
tbl[#tbl+1] = tooltip
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
return table.concat(tbl)
|
||||
end
|
||||
|
||||
local function formspec_help(meta, manual)
|
||||
local idx = meta:get_int("doclib_index")
|
||||
local box = "box[9.4,1.5;1.15,1.25;#BBBBBB]"
|
||||
local bttn, symbol
|
||||
|
||||
if manual.content.aPlans[idx] ~= "" then
|
||||
bttn = "button[9.6,1;1,1;plan;" .. S("Plan") .. "]"
|
||||
elseif manual.content.aImages[idx] ~= "" then
|
||||
local name = manual.content.aImages[idx] or ""
|
||||
local item = manual.content.kvImages[name] or name
|
||||
if string.find(item, ":") then
|
||||
bttn = box .. "item_image[9.45,1.55;1.3,1.3;" .. item .. "]"
|
||||
else
|
||||
bttn = "image[9.4,1.5;1.4,1.4;" .. item .. "]"
|
||||
end
|
||||
else
|
||||
bttn = box
|
||||
end
|
||||
|
||||
if string.find(manual.settings.symbol_item, ":") then
|
||||
symbol = "item_image[9.6,0;1,1;" .. manual.settings.symbol_item .. "]"
|
||||
else
|
||||
symbol = "image[9.6,0;1,1;" .. manual.settings.symbol_item .. "]"
|
||||
end
|
||||
|
||||
return "size[11,10]" ..
|
||||
symbol ..
|
||||
"tablecolumns[tree,width=1;text,width=10,align=inline]" ..
|
||||
"tableoptions[opendepth=1]" ..
|
||||
"table[0.1,0;9,5;page;" .. table.concat(manual.content.aTitles, ",") .. ";" .. idx .. "]" ..
|
||||
bttn ..
|
||||
"box[0,5.75;10.775,4.45;#000000]" ..
|
||||
"style_type[textarea;textcolor=#FFFFFF]" ..
|
||||
"textarea[0.3,5.7;11,5.3;;;" .. (manual.content.aTexts[idx] or "") .. "]"
|
||||
end
|
||||
|
||||
local function formspec_plan(meta, manual)
|
||||
local idx = meta:get_int("doclib_index")
|
||||
local name = manual.content.aPlans[idx] or "none"
|
||||
local tbl = manual.content.kvPlans[name] or {}
|
||||
local titel = string.sub(manual.content.aTitles[idx] or "", 3) or "unknown"
|
||||
|
||||
return "size[11,10]" ..
|
||||
"label[0,0;"..titel..":]" ..
|
||||
"button[10,0;1,0.8;back;<<]" ..
|
||||
plan(tbl)
|
||||
end
|
||||
|
||||
function doclib.formspec(pos, mod, language, fields)
|
||||
if doclib.manual and doclib.manual[mod] and doclib.manual[mod][language] then
|
||||
local manual = doclib.manual[mod][language]
|
||||
local meta = M(pos)
|
||||
|
||||
if not fields then
|
||||
meta:set_int("doclib_index", 1)
|
||||
return formspec_help(meta, manual)
|
||||
elseif fields.plan then
|
||||
return formspec_plan(meta, manual)
|
||||
elseif fields.back then
|
||||
return formspec_help(meta, manual)
|
||||
elseif fields.page then
|
||||
local evt = minetest.explode_table_event(fields.page)
|
||||
if evt.type == "CHG" then
|
||||
local idx = tonumber(evt.row)
|
||||
meta:set_int("doclib_index", idx)
|
||||
end
|
||||
end
|
||||
return formspec_help(meta, manual)
|
||||
end
|
||||
end
|
||||
@@ -0,0 +1,27 @@
|
||||
--[[
|
||||
|
||||
DocLib
|
||||
======
|
||||
|
||||
Copyright (C) 2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
A library to generate ingame manuals based on markdown files.
|
||||
|
||||
]]--
|
||||
|
||||
doclib = {}
|
||||
|
||||
-- Version for compatibility checks, see readme.md/history
|
||||
doclib.version = 1.0
|
||||
|
||||
-- Load support for I18n.
|
||||
doclib.S = minetest.get_translator("doclib")
|
||||
|
||||
local MP = minetest.get_modpath("doclib")
|
||||
|
||||
dofile(MP.."/formspec.lua")
|
||||
dofile(MP.."/api.lua")
|
||||
--dofile(MP.."/node.lua") -- only for testing purposes
|
||||
@@ -0,0 +1,76 @@
|
||||
return {
|
||||
titles = {
|
||||
"1,Heading 1",
|
||||
"2,Heading 2",
|
||||
"3,Heading 3",
|
||||
"2,Text Block",
|
||||
"2,Lists",
|
||||
"2,Code",
|
||||
"2,Construction plan",
|
||||
},
|
||||
texts = {
|
||||
"This is some demo text to demonstrate the generation of ingame manuals from\n"..
|
||||
"markdown files.\n"..
|
||||
"To open sub-chapters\\, click on the plus sign.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"This is a second-level heading.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"This is a third-level heading.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"Lorem ipsum dolor sit amet\\, consetetur sadipscing elitr\\, sed diam nonumy\n"..
|
||||
"eirmod tempor invidunt ut labore et dolore magna aliquyam erat\\, sed diam\n"..
|
||||
"voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet\n"..
|
||||
"clita kasd gubergren\\, no sea takimata sanctus est Lorem ipsum dolor sit\n"..
|
||||
"amet. Lorem ipsum dolor sit amet\\, consetetur sadipscing elitr\\, sed diam\n"..
|
||||
"nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat\\,\n"..
|
||||
"sed diam voluptua.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"This is a list:\n"..
|
||||
"\n"..
|
||||
" - List\n"..
|
||||
" - List\n"..
|
||||
" - List\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"This is a code block:\n"..
|
||||
"\n"..
|
||||
" doclib.create_manual(\"doclib\"\\, \"EN\"\\, settings)\n"..
|
||||
" local content = dofile(MP..\"/manual_EN.lua\") \n"..
|
||||
" doclib.add_to_manual(\"doclib\"\\, \"EN\"\\, content)\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
"This is an example\\, how to make plans/block diagrams.\n"..
|
||||
"Click an the button on the right.\n"..
|
||||
"\n"..
|
||||
"\n"..
|
||||
"\n",
|
||||
},
|
||||
images = {
|
||||
"doclib_demo_img1.png",
|
||||
"doclib_demo_img2.png",
|
||||
"doclib_demo_img3.png",
|
||||
"doclib:manual",
|
||||
"default:dirt",
|
||||
"doclib_demo_img4.png",
|
||||
"",
|
||||
},
|
||||
plans = {
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"demo1",
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
# Heading 1
|
||||
|
||||
This is some demo text to demonstrate the generation of ingame manuals from
|
||||
markdown files.
|
||||
To open sub-chapters, click on the plus sign.
|
||||
|
||||
[doclib_demo_img1.png|image]
|
||||
|
||||
## Heading 2
|
||||
|
||||
This is a second-level heading.
|
||||
|
||||
[doclib_demo_img2.png|image]
|
||||
|
||||
### Heading 3
|
||||
|
||||
This is a third-level heading.
|
||||
|
||||
[doclib_demo_img3.png|image]
|
||||
|
||||
## Text Block
|
||||
|
||||
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
|
||||
eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
|
||||
voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet
|
||||
clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
|
||||
amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
|
||||
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
|
||||
sed diam voluptua.
|
||||
|
||||
[doclib:manual|image]
|
||||
|
||||
## Lists
|
||||
|
||||
This is a list:
|
||||
|
||||
- List
|
||||
- List
|
||||
- List
|
||||
|
||||
[default:dirt|image]
|
||||
|
||||
## Code
|
||||
|
||||
This is a code block:
|
||||
|
||||
```
|
||||
doclib.create_manual("doclib", "EN", settings)
|
||||
local content = dofile(MP.."/manual_EN.lua")
|
||||
doclib.add_to_manual("doclib", "EN", content)
|
||||
```
|
||||
|
||||
[doclib_demo_img4.png|image]
|
||||
|
||||
|
||||
## Construction plan
|
||||
|
||||
This is an example, how to make plans/block diagrams.
|
||||
Click an the button on the right.
|
||||
|
||||
[demo1|plan]
|
||||
|
||||
@@ -0,0 +1,203 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# install mistune v0.8.4 with: pip install mistune==0.8.4
|
||||
|
||||
import re
|
||||
import mistune
|
||||
|
||||
assert(mistune.__version__ == "0.8.4")
|
||||
|
||||
__version__ = "1.0"
|
||||
|
||||
class WikiLinkInlineLexer(mistune.InlineLexer):
|
||||
def enable_wiki_link(self):
|
||||
# add wiki_link rules
|
||||
self.rules.wiki_link = re.compile(
|
||||
r'\[' # [
|
||||
r'([\s\S]+?\|[\s\S]+?)' # name| img-type
|
||||
r'\](?!\])' # ]
|
||||
)
|
||||
|
||||
# Add wiki_link parser to default rules
|
||||
# you can insert it some place you like
|
||||
# but place matters, maybe 3 is not good
|
||||
self.default_rules.insert(3, 'wiki_link')
|
||||
|
||||
def output_wiki_link(self, m):
|
||||
text = m.group(1)
|
||||
name, itype = text.split('|')
|
||||
# you can create an custom render
|
||||
# you can also return the html if you like
|
||||
return self.renderer.wiki_link(name, itype)
|
||||
|
||||
class MarkdownToLua(mistune.Renderer):
|
||||
def __init__(self, *args, **kwargs):
|
||||
mistune.Renderer.__init__(self, *args, **kwargs)
|
||||
self.item_name = ""
|
||||
self.plan_table = ""
|
||||
self.is_first_header = True
|
||||
self.text_chunck = []
|
||||
self.lTitle = []
|
||||
self.lText = []
|
||||
self.lItemName = []
|
||||
self.lPlanTable = []
|
||||
print("Markdown-to-Lua v%s" % __version__)
|
||||
|
||||
def m2l_formspec_escape(self, text):
|
||||
text = text.replace("\\", "")
|
||||
text = text.replace("[", "\\\\[")
|
||||
text = text.replace("]", "\\\\]")
|
||||
text = text.replace(";", "\\\\;")
|
||||
text = text.replace(",", "\\\\,")
|
||||
text = text.replace('"', '\\"')
|
||||
text = text.replace('\n', '\\n')
|
||||
return text
|
||||
|
||||
def m2l_add_last_paragraph(self):
|
||||
"""
|
||||
Used to add a text block before the next header or at the end of the document
|
||||
"""
|
||||
self.lText.append(self.text_chunck)
|
||||
self.text_chunck = []
|
||||
self.lItemName.append(self.item_name)
|
||||
self.item_name = ""
|
||||
self.lPlanTable.append(self.plan_table)
|
||||
self.plan_table = ""
|
||||
##
|
||||
## Block Level
|
||||
##
|
||||
def block_code(self, code, lang):
|
||||
text = self.m2l_formspec_escape(code.strip())
|
||||
lines = text.split("\\n")
|
||||
lines = [" " + item for item in lines]
|
||||
self.text_chunck.extend(lines)
|
||||
self.text_chunck.append("")
|
||||
return ""
|
||||
|
||||
def header(self, text, level, raw=None):
|
||||
if not self.is_first_header:
|
||||
self.m2l_add_last_paragraph()
|
||||
self.is_first_header = False
|
||||
self.lTitle.append("%u,%s" % (level, self.m2l_formspec_escape(text)))
|
||||
return ""
|
||||
|
||||
def hrule(self):
|
||||
self.text_chunck.append("\n----------------------------------------------------\n")
|
||||
return ""
|
||||
|
||||
def paragraph(self, text):
|
||||
lines = text.split("\\n") + [""]
|
||||
self.text_chunck.extend(lines)
|
||||
return ""
|
||||
|
||||
def list(self, body, ordered=True):
|
||||
lines = body.split("\n")
|
||||
self.text_chunck.extend(lines)
|
||||
return ""
|
||||
|
||||
def list_item(self, text):
|
||||
return " - %s\n" % text.strip()
|
||||
##
|
||||
## Span Level
|
||||
##
|
||||
def emphasis(self, text):
|
||||
return "*%s*" % self.m2l_formspec_escape(text)
|
||||
|
||||
def double_emphasis(self, text):
|
||||
return "*%s*" % self.m2l_formspec_escape(text)
|
||||
|
||||
def codespan(self, text):
|
||||
return "'%s'" % self.m2l_formspec_escape(text)
|
||||
|
||||
def text(self, text):
|
||||
return self.m2l_formspec_escape(text)
|
||||
|
||||
def link(self, link, title, content):
|
||||
"""
|
||||
Used for plans and images:
|
||||
[myimage](/image/)
|
||||
[myplan](/plan/)
|
||||
"""
|
||||
if link == "/image/":
|
||||
self.item_name = content
|
||||
elif link == "/plan/":
|
||||
self.plan_table = content
|
||||
return content
|
||||
|
||||
def wiki_link(self, name, itype):
|
||||
"""
|
||||
Used for plans and images:
|
||||
[myimage|image]
|
||||
[myplan|plan]
|
||||
"""
|
||||
if itype == "image":
|
||||
self.item_name = name
|
||||
elif itype == "plan":
|
||||
self.plan_table = name
|
||||
return ""
|
||||
|
||||
def autolink(self, link, is_email=False):
|
||||
return link
|
||||
|
||||
def linebreak(self):
|
||||
return "\\n"
|
||||
|
||||
def newline(self):
|
||||
return "\\n"
|
||||
|
||||
def inline_html(self, text):
|
||||
#print(text)
|
||||
pass
|
||||
|
||||
def parse_md_file(self, src_name):
|
||||
print(" - Read MD file '%s'" % src_name)
|
||||
inline = WikiLinkInlineLexer(self)
|
||||
# enable the feature
|
||||
inline.enable_wiki_link()
|
||||
md = mistune.Markdown(renderer=self, inline=inline)
|
||||
md.renderer.src_name = src_name
|
||||
md.render(open(src_name, 'r').read())
|
||||
md.renderer.m2l_add_last_paragraph()
|
||||
|
||||
def lua_table(self, key, lData):
|
||||
lOut = []
|
||||
lOut.append(" %s = {" % key)
|
||||
for line in lData:
|
||||
lOut.append(' "%s",' % line)
|
||||
lOut.append(" }")
|
||||
return "\n".join(lOut)
|
||||
|
||||
def lua_text_table(self, key, lData):
|
||||
lOut = []
|
||||
lOut.append(" %s = {" % key)
|
||||
for lines in lData:
|
||||
for line in lines[:-1]:
|
||||
line = line.replace('<br>', '\\n')
|
||||
lOut.append(' "%s\\n"..' % line)
|
||||
if len(lines) > 0:
|
||||
lOut.append(' "%s\\n",' % lines[-1])
|
||||
else:
|
||||
lOut.append(' "",')
|
||||
lOut.append(" }")
|
||||
return "\n".join(lOut)
|
||||
|
||||
def gen_lua_file(self, dest_name):
|
||||
print(" - Write Lua file '%s'" % dest_name)
|
||||
lOut = []
|
||||
s = ",\n".join([self.lua_table("titles", self.lTitle),
|
||||
self.lua_text_table("texts", self.lText),
|
||||
self.lua_table("images", self.lItemName),
|
||||
self.lua_table("plans", self.lPlanTable)])
|
||||
open(dest_name, "w").write("return {\n%s\n}" % s)
|
||||
print("done.")
|
||||
|
||||
m2l = MarkdownToLua()
|
||||
m2l.parse_md_file("./manual_EN.md")
|
||||
m2l.gen_lua_file("./manual_EN.lua")
|
||||
|
||||
#m2l = MarkdownToLua()
|
||||
#m2l.parse_md_file("./manual_DE.md")
|
||||
#m2l.gen_lua_file("./manual_DE.lua")
|
||||
|
||||
# You can add further languages
|
||||
@@ -0,0 +1,3 @@
|
||||
name = doclib
|
||||
description = A library to generate ingame manuals based on markdown files.
|
||||
author = joe7575
|
||||
@@ -0,0 +1,100 @@
|
||||
--[[
|
||||
|
||||
DocLib
|
||||
======
|
||||
|
||||
Copyright (C) 2023 Joachim Stolberg
|
||||
|
||||
AGPL v3
|
||||
See LICENSE.txt for more information
|
||||
|
||||
A library to generate ingame manuals based on markdown files.
|
||||
|
||||
]]--
|
||||
|
||||
-- for lazy programmers
|
||||
local S = doclib.S
|
||||
local P2S = function(pos) if pos then return minetest.pos_to_string(pos) end end
|
||||
local S2P = minetest.string_to_pos
|
||||
local M = minetest.get_meta
|
||||
local MP = minetest.get_modpath("doclib")
|
||||
|
||||
local settings = {
|
||||
symbol_item = "doclib_book_inv.png", -- can be a PGN file or a item, like: "mod:name"
|
||||
}
|
||||
|
||||
doclib.create_manual("doclib", "EN", settings)
|
||||
local content = dofile(MP.."/manual_EN.lua")
|
||||
doclib.add_to_manual("doclib", "EN", content)
|
||||
|
||||
minetest.register_node("doclib:manual", {
|
||||
description = "DocLib Manual (EN)",
|
||||
inventory_image = "doclib_book_inv.png",
|
||||
tiles = {
|
||||
-- up, down, right, left, back, front
|
||||
"doclib_book.png",
|
||||
"doclib_book.png",
|
||||
"doclib_book.png^[transformR270",
|
||||
"doclib_book.png^[transformR90",
|
||||
"doclib_book.png^[transformR180",
|
||||
"doclib_book.png"
|
||||
},
|
||||
drawtype = "nodebox",
|
||||
node_box = {
|
||||
type = "fixed",
|
||||
fixed = {
|
||||
{ -8/32, -16/32, -12/32, 8/32, -12/32, 12/32},
|
||||
},
|
||||
},
|
||||
|
||||
after_place_node = function(pos, placer, itemstack)
|
||||
M(pos):set_string("infotext", "DocLib Manual (EN)")
|
||||
M(pos):set_string("formspec", doclib.formspec(pos, "doclib", "EN"))
|
||||
end,
|
||||
|
||||
on_receive_fields = function(pos, formname, fields, player)
|
||||
local player_name = player:get_player_name()
|
||||
if minetest.is_protected(pos, player_name) then
|
||||
return
|
||||
end
|
||||
M(pos):set_string("formspec", doclib.formspec(pos, "doclib", "EN", fields))
|
||||
end,
|
||||
|
||||
paramtype = "light",
|
||||
sunlight_propagates = true,
|
||||
paramtype2 = "facedir",
|
||||
use_texture_alpha = "clip",
|
||||
is_ground_content = false,
|
||||
groups = {choppy = 2, oddly_breakable_by_hand = 2, flammable = 2},
|
||||
})
|
||||
|
||||
|
||||
--
|
||||
-- Demo plan 1
|
||||
--
|
||||
local ITEM1 = {"item", "doclib_demo_img1.png"}
|
||||
local ITEM2 = {"item", "doclib_demo_img2.png", "Tooltip 1"}
|
||||
local ITEM3 = {"item", "doclib_demo_img3.png", "Tooltip 2"}
|
||||
local ITEM4 = {"item", "doclib_demo_img4.png", "Tooltip 3"}
|
||||
local ITEM5 = {"item", "doclib_book_inv.png", "doclib:manual"}
|
||||
local ITEM6 = {"item", "doclib:manual", "doclib:manual"}
|
||||
local IMG_1 = {"img", "doclib_book_inv.png", "2,2"}
|
||||
local TEXT1 = {"text", "Top view"}
|
||||
local TEXT2 = {"text", "Pointless Demo"}
|
||||
local TEXT3 = {"text", "End"}
|
||||
|
||||
-- The maximum plan size is 12 fields wide and 10 fields high
|
||||
local plan1 = {
|
||||
{TEXT2, false, false, false, false, false, false, false, false, false, false, ITEM4},
|
||||
{false, false, false, TEXT1, false, false, false, false, IMG_1, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, ITEM1, false, false, false, false, false, false, false},
|
||||
{false, false, false, ITEM4, ITEM5, ITEM2, false, false, false, false, false, false},
|
||||
{false, false, false, false, ITEM3, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, ITEM6, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{false, false, false, false, false, false, false, false, false, false, false, false},
|
||||
{TEXT3, false, false, false, false, false, false, false, false, false, false, ITEM4},
|
||||
}
|
||||
|
||||
doclib.add_manual_plan("doclib", "EN", "demo1", plan1)
|
||||
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 288 KiB |